JSON е съкращение от JavaScript Object Notation – текстово базиран отворен стандарт, създаден за човешки четим обмен на данни. Произлиза от скриптовия език JavaScript, за да представя прости структури от данни и асоциативни масиви, наречени обекти. Въпреки своята връзка с JavaScript, това е езиково независима спецификация, с анализатори, които могат да преобразуват много други езици в JSON.
Форматът на JSON първоначално е създаден от Дъглас Крокфорд (Douglas Crockford) и е описан в RFC 4627. Официалният интернет медия тип за JSON е application/json. Разширението на файловете написани на JSON е .json.
Форматът на JSON често е използван за сериализация и предаване на структурирани данни през интернет връзка. Използва се главно, за да предаде данни между сървър и интернет приложение, изпълнявайки функциите на алтернатива на XML.
История Дъглас Крокфорд първи установява и популяризира JSON формата.Video: Douglas Crockford – The JSON Saga , on Yahoo! Developer Network. In the video Crockford states: „I do not claim to have invented JSON ... What I did was I found it, I named it, I described how it was useful. ... So, the idea's been around there for a while. What I did was I gave it a specification, and a little Web site.“
JSON е бил използван в State Software Inc. – компания, основана през април 2001 г. и спонсорирана от Tesla Ventures. Един от основателите ѝ е Крокфорд. Когато компанията е създадена през ранната 2001 от шест бивши служители на Communities.com, те се съгласяват да създадат система, която да използва стандартните възможности на браузъра и да предоставят абстрактен слой на интернет разработчиците, за да създават динамично защитени интернет приложения, които да имат постоянна дуплекс връзка с интернет сървъра, която да държи две HTTP връзки отворени. Тя ги презарежда преди стандартните за браузъра времена за прекъсване, ако няма повече данни, които да се обменят. Идеята на State Application Framework е разработена от Чип Морнингстар (Chip Morningstar) в State Software.
Използван е в проект на Communities.com за Cartoon Network, които използват плъгини със собствен формат на съобщенията, за да манипулират DHTML елементите (тази система е собственост на 3DO). По време на ранното откриване на възможностите на езика Ajax, digiGroups, Noosh и други използвали рамки, за да предават информация във визуалното поле на браузърите на потребителите, без да е нужно да се презарежда визуалният контекст на интернет приложението. Всъщност интернет приложенията използвали само стандартните HTTP, HTML и JavaScript способности на Netscape 4.0.5+ и IE 5+. След това Дъглас Крокфорд осъзнал, че JavaScript може да бъде използван като обектно-базиран формат за пращане на съобщения за такава система. Системата е продадена на Sun Microsystems, Amazon.com и EDS. Интернет сайтът на Json JSON.org е стартиран през 2002 г. През декември 2005 г. Yahoo! започват да предлагат някои от своите интернет услуги в JSON код. Google започва да предлага JSON поддръжка за неговия GData интернет протокол през декември 2006 г.
Въпреки че JSON е оригинално базиран на нестриктно подмножество на скриптовия език JavaScript (по-специално стандартът ECMA-262 3rd Edition—декември 1999 г.) и често се използва с този език, той е езиково независима спецификация за формат на данни. Код за анализиране и генериране на данни за JSON имат голямо разнообразие от програмни езици. Сайтът на JSON предоставя разбираемо подреждане на съществуващите JSON библиотеки, организирани от езика.
Типове данни, синтаксис и примери Базовите типове данни на JSON са: Number: десетично число със знак, което може да съдържа дробна част и да бъде в експоненциална форма (Е-нотация), например или за кодиране в експоненциална форма на 6.022×1023 String: (низ от символи с Unicode кодиране, затворени в двойни кавички, като „специалните“ символи се представят с т.нар. escaping – символни последователности, започващи със символа „\“) Boolean: (true или false) Array: (наредена поредица от стойности, разделени със запетая и затворени в квадратни скоби; стойностите не е задължително да бъдат от един и същ тип) Object: (неподредена колекция от двойки ключ:стойност, символът „:“ разделя ключа и стойността, разделени със запетая и затворени в къдрави скоби; ключовете трябва да са стрингове и да са различни един от друг) null: (empty)
Всяко незначимо бяло пространство може да бъде добавено около „структурните символи“ (като скоби „{} []“, двоеточие ‘:’ и запетаи ‘,’).
Следващият пример показва представянето на обект, който описва човек в JSON. Обектът има string полета за първо и последно име, Number поле за години, Object, който представя адреса на човека, и Array от телефонни номера, представени като Object.
{ "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": 10021 }, "phoneNumbers": [
"type": "home", "number": "212 555-1234" },
"type": "fax", "number": "646 555-4567"
] }
Един потенциален недостатък на свободната форма на JSON идва от възможността числата да се пишат като числови константи или низове в кавички. Например ZIP кодовете в североизточна Америка започват с нули (например 07728 за Freehold, New Jersey). Ако числото е написано с кавички, започващите нули може да се пропуснат при обмяна на данни между системите, когато се търси за тях в същата система или когато се печатат. Като добавка пощенските кодове в САЩ използват числа, но в други страни използват и букви. Това е типът проблеми, с които JSON Schema-та (виж по-надолу) се цели да се справи.
Откакто JSON e почти подмножество на JavaScript е възможно, но не се препоръчваJSON in JavaScript , on JSON's web page: "The eval function is very fast. However, it can compile and execute any JavaScript program, so there can be security issues [...]" да се преобразува текстът от JSON в обект, като се използва функцията на JavaScript eval(). Като пример, ако горните данни от JSON кода се поберат в JavaScript string променлива contact, може да се използва, за да се създаде обект както следва:
var p = eval("(" + contact + ")");
Променливата contact трябва да бъде в скоби, за да се избегне двусмислието в JavaScript синтаксиса.
Предпочитаният начин обаче е да се използва JSON анализатор. Освен ако клиентът не вярва на източника или трябва да анализира и приеме текст, който не е JSON съвместим, човек трябва да избягва eval(). Коректно имплементран JSON анализатор приема само валиден JSON код, предотвратявайки изпълнение на злонамерени кодове по погрешка.
var p = JSON.parse(contact);
Интернет браузърите, като Firefox и Internet Explorer, включват от 2010 специални функции, които да анализират JSON. Като поддръжката на браузъра е по-ефикасна и сигурна отколкото eval(). Поддръжката на JSON e включена в петото издание на ECMAScript стандарта.Standard ECMA-262
Библиотеките на jQuery обвиват обекта на JSON във функция конструктор и я изпълняват незабавно, ако не съществува JSON анализатор. Това избягва ползването на eval().
var p = new Function('return ' + contact ';')();
Въпреки широко разпространеното вярване, че JSON e подмножество на JavaScript, това не е вярно. По-точно JSON позволява уникод прекъсващите реда символи U+2028 РЕД РАЗДЕЛИТЕЛ и U+2029 ПАРАГРАФ РАДЕЛИТЕЛ да изглеждат не избегнати поставени в кавички, докато Java Script не го прави. Това е вследствие на непозволяващите „контролни литерали“ в JSON. Тази фина разлика е важна, когато се генерира JASONP.
Неподдържани от JSON типове данни JavaScript синтаксисът дефинира няколко присъщи за него типове данни, които не са включени в стандарта на JSON.RFC 4627
Date, Error, Regular Expression, and Function. Тези JavaScript типове данни трябва да бъдат представени като някой друг формат данни, тъй като програмите от двата края не се разбират как става преобразуването на данните между типовете. От 2011 има някои стандарти като например за преобразуването на Date в String, но не са универсално разпознати.jquery – How to format a JSON date? – Stack Overflow Други езици може да имат различен брой присъщи типове, които могат внимателно да бъдат използвани, за да се разреши проблемът с преобразуването между типовете данни.
JSON Schema
JSON SchemaJSON Schema определя JSON базиран формат, който да дефинира структурата на JSON данните за валидиране, документация и контрол на взаимодействието. JSON Schema-та осигурява споразумение между данните на JSON и приложението, което иска да ги ползва и модифицира. JSON Schema е базирана на концепцията на XML Schema, RelaxNG, и Kwalify, но е и JSON базирана, за да може данните на JSON във формата на JSON Schema да бъдат използвани, за да се валидират данни от JSON. Същите сериализационни/десриализационни инструменти могат да бъдат използвани за схемата и данните.
JSON Schema е Internet Draft, на version 4.JSON Schema draft 4 Има няколко сериални валидатори, които са налични за различните програмни езици, всеки с различни нива на съответствие.JSON Schema реализации
Примерна JSON Schema: { "name": "Product", "properties": { "id": { "type": "number", "description": "Product identifier", "required": true }, "name": { "type": "string", "description": "Name of the product", "required": true }, "price": { "type": "number", "minimum": 0, "required": true }, "tags": { "type": "array", "items": { "type": "string"
}, "stock": { "type": "object", "properties": { "warehouse": { "type": "number" }, "retail": { "type": "number"
JSON Schema-та отгоре може да се използва, за да се валидира кодът по-долу:
{ "id": 1, "name": "Foo", "price": 123, "tags": [ "Bar", "Eek" ], "stock": { "warehouse": 300, "retail": 20
MIME type Официалният MIME тип за JSON е „application/json“.IANA | Application Media Types
JSON-RPC JSON-RPC е RPC протокол, разработен на JSON, като заместител на XML-RPC или SOAP. Той е прост протокол, който дефинира само няколко типове данни и команди. JSON-RPC разрешава известия (информация, изпратена до сървъра, която не изисква отговор) и множество от повиквания да бъдат изпратени до сървъра, които могат да бъдат отговорени, без да бъдат поръчвани.
Пример за JSON-RPC 2.0 заявка и отговор, използвайки позиционни параметри: -->{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1} <-- {"jsonrpc": "2.0", "result": 19, "id": 1}
Употреба в Ajax JSON често се използва в програмирането на Ajax. Ajax е термин за способността на уеб страницата да изисква нови данни след като е заредила в уеб браузъра, обикновено в отговор на действията на потребителя на изобразената интернет страница. Като част от модела на Ajax, новата информация обикновено се включва в интерфейса на потребителя и се показва динамично още щом се получи от сървъра. Като пример за това на практика е, че, ако някой потребител пише в search box, скриптове от браузъра на клиента изпращат какво е написал потребителят дотогава в сървъра, който отговаря с лист от възможни завършени търсения от неговата база данни. Те могат да бъдат изобразени като падащо меню под търсачката, за да може потребителят отгоре да спре да пише и да избере цялостен и често търсен низ директно. Когато е бил описан през средата на 2000-ната година, Ajax най-често използвал XML като формат за обмен на данни, но много разработчици също използвали JSON, за да предават обновления между сървъра и клиента.
Следващият JavaScript код е пример за client, който използва XMLHttpRequest, за да изискат информацията в JSON формат от сървъра. (Програмирането от страна на сървъра е пропуснато; то трябва да е настроено да отговаря на заявките на url с JSON-форматиран string.)
var my_JSON_object; var http_request = new XMLHttpRequest(); http_request.open("GET", url, true); http_request.onreadystatechange = function () { var done = 4, ok = 200; if (http_request.readyState == done && http_request.status == ok) { my_JSON_object = JSON.parse(http_request.responseText);
http_request.send(null);