JSON формат: Пример и описание: SYL.ru

JSON е абревиатура на Java Script Object Notation, която е формат, който използва четения от човека текст за предаване на данни, които се състоят от двойки стойности на атрибути. Това е най-разпространеният формат за данни, използван за асинхронна комуникация между браузъра и сървъра, който до голяма степен замества XML (AJAX).

JSON е независим от езика формат за данни, който е получен от javascript. От 2017 г. много езици за програмиране използват кода за генериране и анализиране на данни само в него. Имената на JSON файловете използват разширение .json.

История на създаването

Първоначално форматът на JSON създаде Дъглас Крокфорд в началото на нулата, а в бъдеще два конкуриращи се стандарта (RFC 7159 и ECMA-404) го определиха през 2013 г. Стандартът ECMA описва само валидния синтаксис, докато RFC покрива някои от основите на сигурността и оперативната съвместимост. В допълнение, има стандартен RFC 7493, който определя ограничен профил, известен като I-JSON (пряк път от "Internet JSON"). Той се стреми да преодолее някои взаимодействия. Всеки такъв документ е валиден документ JSON. Необходимостта от създаване на този формат се е увеличила от необходимостта от реален комуникационен протокол между сървъра и браузъра, реализиран в реално време, без използването на плъгини (като Flash или Java аплети).

Разработване и прилагане

Както вече споменахме, Дъглас Крокфорд, като създател на StateSoftware, първо идентифицира и популяризира JSON формата. Впоследствие съоснователите се съгласиха да създадат система, която използва стандартни възможности на браузъра,и предостави ниво на абстракция за разработчиците да създават приложения с непрекъснато двустранно свързване към уеб сървъра. В този случай е възможно двата HTTP връзки да бъдат отворени и да се справят с тях до стандартното време на браузъра, ако не са били обменени данни. Съоснователите проведоха дискусия на кръгла маса и гласуваха за назоваване на JSML или JSON формата на данните, както и за вида на лиценза, за който ще се предлага новият дизайн. Понастоящем форматът е отворен код.

Практическо използване

Уебсайтът JSON.org стартира през 2002 г. През декември 2005 г. Yahoo! започна да предлага някои от своите уеб услуги в този формат. Google започна да прилага JSON каналите към своя уеб протокол GData едва през декември 2006 г. Първоначално форматът на JSON файл беше предназначен за подмножество на езика на скрипта на JavaScript (по-специално Standard ECMA-262 3rd Edition-December) и често се използваше с него. Въпреки това, тя не зависи от данните в езиковия формат. Кодът за анализ и генериране на JSON данни е достъпен на много езици за програмиране. Уебсайтът на JSON изброява всички библиотеки. Въпреки факта, че онлайн JSON форматът първоначално е рекламиран и се счита за строго подмножество на javascript и ECMAScript, той периодично позволява някои символи да не се сканират в редове, които са недопустими в низовете на javascript и ECMAScript.

Самият JSON стана международен стандарт ECMA през 2013 г. като стандарт ECMA-404, който беше използван през същата година, както RFC 7158 като отправна точка. През 2014 г. RFC 7159 се превърна в основна препратка към използването на JSON в Интернет (например MIMEзаявление /json).

Видове данни, синтаксис и пример

Основните типове JSON данни са:
  • Number: десетично число с знак, което може да съдържа частична част и може да използва експонента E, но не може да включва не-номера (например, NaN). Форматът не прави разлика между цели и числа с плаваща запетая. JavaScript използва двоен формат с плаваща запетая за всичките си числови стойности, но други езици, които се използват в JSON, могат да ги кодират по различен начин.
  • Линия: Поредица от нули или големи Unicode знаци. Редовете са разделени от двойно цитирани символи и поддържат синтаксиса с обратна наклонена черта.
  • Литерали: всяко от стойностите true или false.
  • Масив: подреден списък с нула или повече стойности, всеки от които може да бъде от всякакъв тип. Масивите използват квадратни скоби със запетаи.
  • Обект: неподреден набор от двойки име /стойност, където имената (наричани още ключове) са редове. Тъй като обектите са предназначени да представят асоциативни масиви, препоръчва се (макар и не непременно), че всеки ключ е уникален в него. Обектите се разделят с фигурни скоби и се използват запетаи за разделяне на всяка двойка, докато във всеки от тях двоеточие изчиства ключа или името от неговата стойност.
  • Null: Празна стойност, използвайки думата null.
  • Ограничените пространства са позволени и могат да се показват около или между синтактичните елементи (смисъл и пунктуация, но не в рамките на низовата стойност). За тази цел само четири специални знакасе считат за интервали: интервал, хоризонтален раздел, превод на линия и изкривяване. По-специално, етикетът за байтовия ред не трябва да се генерира от съответната реализация (въпреки че може да бъде приет от JSON анализи). JSON заявката не осигурява синтаксис за коментари. Ранните версии (като посочените в RFC 4627) изискват валиден документ да се състои само от обект или тип масив, който може да съдържа други видове вътре в тях. Този JSON формат, пример за който може да се намери на остарели уеб страници, понастоящем не се използва.

    Проблеми с прехвърлянето на данни

    Въпреки факта, че Дъглас Крекфорд първо твърди, че JSON е строго подмножество на javascript, неговата спецификация ви позволява да създавате документи, прочетени в javascript. По-специално, JSON позволява стойностите на линиите Unicode U + 2028 LINE SEPARATOR и U + 2029 PARAGRAPH SEPARATOR да бъдат неекранирани в низове, а javascript не. Това се дължи на факта, че JSON забранява само "контролни знаци". За максимална съвместимост, тези знаци трябва да бъдат екранирани с наклонена черта. Тази тънкост е важна при създаването на JSONP.

    JSON формат: какво да отворите?

    JSON документите могат да бъдат кодирани в UTF-8 UTF-16 или UTF-32 стандартно кодиране - UTF-8. Тези стандарти поддържат пълния набор от символи на Unicode, включително знаците извън основната многоезична равнина (от U + 10000 до U + 10FFFF). Анализатори на формат JSON Какво да отваряте и как ще бъдепрочетете този файл? Числата в този формат са агностични по отношение на представянето им в езиците за програмиране. Няма разлика между цяло число и плаваща запетая: някои реализации могат да разглеждат 42420 и 4.2 E + 1 като един и същ номер, докато други не могат да го направят. Освен това няма изисквания за въпроси като препълване, недостатъчност, загуба на точност или закръгляване. В допълнение, JSON формат няма какво да каже за обработката на подписани нули, независимо дали има 0.0 или различен от -0.0. Повечето приложения, които използват IEEE 754 стандарт с плаваща запетая, включително javascript, запазват нули, но не всички JSON реализации могат да направят това.

    Използване на javascript

    Тъй като JSON форматът е извлечен от javascript и неговият синтаксис (основно) е подмножество на езика, javascripteval може да се използва за анализ на JSON данни. Поради проблемите с разбивки на Unicode низ, разгледани в предишния раздел, функцията eval трябва да изпълни подмяната. Това е опасно, ако низът не е проверен правилно. Вместо това трябва да използвате библиотеката на JSON парсер или поддръжката на JavaScript за четене и запис на JSON. Правилно изпълненият анализатор приема само валидния JSON формат, който е описан в системата, предотвратявайки неволното изпълнение на потенциално опасен код. От 2010 г. такива браузъри поддържат Firefox и Internet Explorer за анализ и разтоварване в JSON формат.

    Неподдържани собствени типове данни

    Синтаксисът на javascript определя няколко собствени типа данни, които не са включени вСтандарт JSON: Карта, Инсталиране, Дата, Грешка, Редовен израз, Функция и някои други. Тези типове данни за javascript трябва да бъдат представени от някои други формати, като и двете програми се съгласяват с начина на конвертиране между типовете. Днес има някои дефакто стандарти, например конвертиране на дата в низ, но никой от тях не е общоприет. Други езици може да имат различен набор от собствени типове, които трябва да бъдат внимателно сериализирани, за да се справят с този тип преобразуване.

    JSON схема

    Схемата се използва за определяне на структурата на JSON данните за проверка, документиране и управление на взаимодействието. Той предоставя вид договор за данните, изисквани от приложението, и начина, по който е променен. Схемата се основава на концепции от XML Schema (XSD), но е собствена. Както при XSD, същите инструменти за сериализация /десериализация се използват както за схемата, така и за данните. Схемата е онлайн проект, който в момента е във версия 5 (издадена на 13 октомври 2016 г.). Има няколко валидатора за различни програмни езици, всеки от които има различни нива на съответствие. Няма стандартни файлови разширения, но някои експерти предлагат да одобрят .schema.json.

    MIME тип

    Официалният MIME тип за JSON текст е "application /json". Въпреки факта, че повечето съвременни реализации са приели официалния MIME тип, много приложения продължават да предоставят наследство за други MIME типове. Много доставчици на услуги, браузъри, сървъри, уеб приложения, библиотеки, рамки и API-и използват, чакат или разпознават MIME типа, чието съдържание изглежда"Текст /json" или "текст /javascript". Известни примери са Google Search API, Yahoo !, Flickr, Facebook API, DojoToolkit 0.4 и така нататък.

    JSON-RPC

    JSON-RPC е протокол за отдалечено извикване на процедури (RPC), изграден върху JSON, създаден като заместител на XML-RPC или SOAP. Това е прост протокол, който дефинира само няколко вида данни и команди. Тя позволява на системата да изпраща съобщения (информация на сървъра, която не изисква отговор) и няколко повиквания към сървъра, на които може да се отговори без ред.

    AJAJ

    Асинхронният javascript и JSON (или AJAJ) се отнасят до една и съща динамична методология на уеб страниците като Ajax, но вместо XML, точният формат на JSON данните е от съществено значение. AJAJ е технология за уеб разработка, която позволява на уеб страницата да изисква нови данни след изтегляне в браузъра. Обикновено ги показва от сървъра в отговор на потребителски действия на тази страница. Например, това, което потребителят влиза в полето за търсене, клиентският код след това изпраща на сървъра, което веднага съответства на падащия списък на съответните елементи на базата данни.

    Проблеми със сигурността

    Текстът в JSON формат се определя като обект на сериализация на данни. Въпреки това, неговият дизайн, като не-объркващо подмножество на езика на скрипта на JavaScript, създава няколко проблеми със сигурността. Те се фокусират върху използването на интерпретатора на Javascript, за да изпълняват динамично JSON текста като вграден javascript. Това представя програмата лъжливи или злонамерени скриптове. Това е сериозен проблем при работа с данни, извлечени от Интернет. Този прост и популярен, но рисков метод използва съвместимост на функционалносттаjavascripteval. Някои разработчици погрешно смятат, че текстът JSON също е синтактично подобен на javascript, въпреки че това е само частично вярно. Затова се смята, че лесният начин за JavaScript програмата да анализира данните във формат е да използва вградената функция javascripteval, която е разработена за оценка на изразите "javascript". Вместо да се използва специален анализатор, самият интерпретатор се използва за изпълнение на JSON данни чрез създаване на естествени обекти на JavaScript. Този метод обаче е рискован, ако е вероятно JSON данните да съдържат произволен Javascript код, който ще бъде изпълнен по същия начин. Ако не се предприемат мерки за проверка на данните, методът eval е предразположен към уязвимости в сигурността, когато данните и цялата среда на javascript не са под контрола на един надежден източник. Например, ако данните не са проверени, те са атакувани от зловредния код на JavaScript. Такива нарушения могат също да представляват риск от кражба на данни, фалшива идентификация и други потенциални злоупотреби с данни и ресурси. Така, новата JSON.parse функция е разработена като по-безопасна алтернатива на eval. Той е специално проектиран за обработка на данни, а именно JSON, а не javascript. Първоначално е планирано да бъде включено в четвъртото издание на стандарта ECMAScript, но това не се случи. Първо беше добавен към петата версия и сега се поддържа от основните браузъри.

    Свързани публикации