JSON - JSON

JavaScript Object Notation
Vektorové logo JSON. Svg
Přípona názvu souboru
.json
Typ internetového média
aplikace/json
Zadejte kód TEXT
Jednotný identifikátor typu (UTI) public.json
Typ formátu Výměna dat
Rozšířeno z JavaScript
Standard STD 90 ( RFC  8259 ), ECMA-404 , ISO/IEC 21778: 2017
Otevřený formát ? Ano
webová stránka json .org

JSON ( JavaScript Object Notation , výraznější / s ən / ; i / ˌ s ɒ n / ) je otevřený standard formát souboru a výměna dat formát, který používá čitelné textové ukládat a přenášet data objektů skládající se z páry a pole atribut – hodnota (nebo jiné serializovatelné hodnoty). Jedná se o běžný datový formát s rozmanitou škálou funkcí při výměně dat včetně komunikace webových aplikací se servery .

JSON je jazykově nezávislý datový formát. Byl odvozen z JavaScriptu , ale mnoho moderních programovacích jazyků obsahuje kód pro generování a analýzu dat formátu JSON. Jména souborů JSON používají příponu .json.

Douglas Crockford původně specifikoval formát JSON na počátku roku 2000.

Pojmenování a výslovnost

Zkratka vznikla v State Software, společnosti spoluzakládané Douglasem Crockfordem a dalšími v březnu 2001.

Mezi 2017 mezinárodní standard (ECMA-404 a ISO / IEC 21778: 2017) stanoví, "prohlásil / . S ə n / , jak v ' Jason a The Argonauts ' ". První (2013) vydání ECMA-404 výslovnost neřešilo. UNIX a Linux System Administration Handbook uvádí, že „ Douglas Crockford , který jmenoval a podporovaný formát JSON, říká, že to je vyslovováno jako jméno Jason. Ale nějak se zdá‚JAY-řezané‘k stali běžnější v technické komunitě.“ Crockford v roce 2011 řekl: „Existuje mnoho argumentů o tom, jak to vyslovujete, ale mě to absolutně nezajímá.“

Standardy

Poté, co byl RFC  4627 k dispozici jako „informační“ specifikace od roku 2006, byl JSON poprvé standardizován v roce 2013 jako ECMA -404. RFC  8259 , publikovaný v roce 2017, je aktuální verzí internetového standardu STD 90 a zůstává v souladu s ECMA-404. Ten stejný rok byl JSON také standardizován jako ISO / IEC 21778: 2017. Tyto ECMA a ISO standardy popsat pouze povolenou syntaxe, zatímco RFC pokrývá některé bezpečnostní a práce v různých hledisek.

Dějiny

Douglas Crockford v budově Yahoo (2007)

JSON vyrostl z potřeby bezstavového komunikačního protokolu server-prohlížeč v reálném čase bez použití doplňků prohlížeče, jako jsou Flash nebo Java applety, dominantní metody používané na počátku dvacátých let.

Předchůdce knihoven JSON byl použit v dětském projektu digitální obchodování s aktivy s názvem Cartoon Orbit na Communities.com (na kterém dříve spolupracovali spoluzakladatelé State Software) pro společnost Cartoon Network, která používala zásuvný modul na straně prohlížeče s proprietární formát zpráv pro manipulaci s dynamickými prvky HTML (tento systém je také ve vlastnictví 3DO). Po objevení raných schopností Ajaxu využily digiGroups, Noosh a další rámce k předávání informací do vizuálního pole uživatelských prohlížečů, aniž by obnovovaly vizuální kontext webové aplikace, a realizovaly bohaté webové aplikace v reálném čase využívající pouze standardní možnosti HTTP, HTML a JavaScript Netscape 4.0.5+ a IE 5+.

Crockford nejprve specifikoval a propagoval formát JSON. Spoluzakladatelé State Software souhlasili s vybudováním systému, který používá standardní možnosti prohlížeče, a poskytoval abstrakční vrstvu pro webové vývojáře k vytváření stavových webových aplikací, které měly trvalé duplexní připojení k webovému serveru tím, že nechali otevřená dvě připojení HTTP ( Hypertext Transfer Protocol ) a jejich recyklaci před vypršením časových limitů standardního prohlížeče, pokud nebyla vyměněna žádná další data. Spoluzakladatelé vedli diskusi u kulatého stolu a hlasovali, zda zavolat datový formát JSML (JavaScript Markup Language) nebo JSON (JavaScript Object Notation), a také pod jakým typem licence jej zpřístupnit. Chip Morningstar vyvinul myšlenku pro státní aplikační rámec ve společnosti State Software.

Systém byl prodán společnostem Sun Microsystems , Amazon.com a EDS . Web JSON.org byl spuštěn v roce 2002. V prosinci 2005 Yahoo! začal nabízet některé své webové služby v JSON.

JSON byl založen na podmnožině z JavaScript skriptovací jazyk (konkrétně standard ECMA -262 3rd Edition-prosinec 1999) a je běžně používán u JavaScriptu, ale to je jazykově nezávislý datový formát. Kód pro analýzu a generování dat JSON je snadno dostupný v mnoha programovacích jazycích . Web JSON uvádí knihovny JSON podle jazyka.

V říjnu 2013 vydala společnost Ecma International první vydání svého standardu JSON ECMA-404. Ve stejném roce použil RFC  7158 jako referenci ECMA-404. V roce 2014 se RFC  7159 stal hlavní referencí pro internetové použití JSON, nahrazuje RFC  4627 a RFC  7158 (ale zachovává ECMA-262 a ECMA-404 jako hlavní reference). V listopadu 2017 publikovala ISO/IEC JTC 1/SC 22 mezinárodní normu ISO/IEC 21778: 2017. Dne 13. prosince 2017 zastarala pracovní skupina pro internetové inženýrství RFC  7159, když vydala RFC  8259 , což je aktuální verze internetového standardu STD 90.

Crockford přidal do licence JSON klauzuli o tom, že „Software bude používán pro dobro, ne pro zlo“, aby otevřel zdrojové knihovny JSON a zároveň zesměšňoval firemní právníky a ty, kteří jsou příliš pedantští. Na druhé straně tato klauzule vedla k problémům s kompatibilitou licence licence JSON s jinými licencemi typu open-source , protože software s otevřeným zdrojovým kódem a svobodný software obvykle neznamenají žádná omezení účelu použití.

Syntax

Následující příklad ukazuje možnou reprezentaci JSON popisující osobu.

{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 27,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [],
  "spouse": null
}

Kódování znaků

Ačkoli Crockford původně tvrdil a věřil, že JSON je přísnou podmnožinou JavaScript a ECMAScript, jeho specifikace ve skutečnosti umožňuje platné dokumenty JSON, které nejsou platným JavaScriptem; JSON umožňuje, aby se ukončovače řádků Unicode U+2028 LINE SEPARATOR a U+2029 PARAGRAPH SEPARATOR zobrazovaly v uvozovkách bez uvození, zatímco ECMAScript 2018 a starší nikoli. To je důsledek toho, že JSON zakazuje pouze „kontrolní znaky“. Pro maximální přenositelnost by tyto znaky měly být se zpětným lomítkem.

Výměna JSON v otevřeném ekosystému musí být kódována v UTF-8 . Kódování podporuje celou znakovou sadu Unicode, včetně znaků mimo základní vícejazyčnou rovinu (U+10 000 až U+10FFFF). Pokud však uniknou, musí být tyto znaky zapsány pomocí náhradních párů UTF-16 . Chcete -li například zahrnout znak Emoji U+1F610 😐 NEUTRÁLNÍ TVÁŘ do JSON:

{ "face": "😐" }
// or
{ "face": "\uD83D\uDE10" }

Při revizi jazyka v roce 2019 se JSON stal přísnou podmnožinou ECMAScriptu.

Typy dat

Základní datové typy JSON jsou:

  • Číslo: desetinné číslo se znaménkem, které může obsahovat zlomkovou část a může používat exponenciální zápis E , ale nemůže obsahovat jiná čísla, jako je NaN . Formát nerozlišuje mezi celými čísly a plovoucí desetinnou čárkou. JavaScript používá pro všechny své číselné hodnoty formát s plovoucí desetinnou čárkou s dvojitou přesností (až později také podporuje BigInt ), ale jiné jazyky implementující JSON mohou kódovat čísla odlišně.
  • Řetězec : sekvence nula nebo více znaků Unicode . Řetězce jsou ohraničeny s double-uvozovkách a podporovat zpětné lomítko útěku syntaxi.
  • Boolean : buď z hodnot, truenebofalse
  • Pole : uspořádaný seznam nula nebo více prvků, z nichž každý může být jakéhokoli typu. Pole používají notaci v hranatých závorkách s prvky oddělenými čárkami.
  • Objekt : kolekce dvojic název – hodnota, kde názvy (nazývané také klíče) jsou řetězce. Objekty mají reprezentovat asociativní pole , kde každý klíč je v rámci objektu jedinečný. Objekty jsou odděleny složenými závorkami a oddělují každý pár čárkami, zatímco v každém páru znak dvojtečky ':' odděluje klíč nebo jméno od jeho hodnoty.
  • null: prázdná hodnota pomocí slova null

Mezery jsou povoleny a ignorovány kolem nebo mezi syntaktickými prvky (hodnoty a interpunkce, ale ne v řetězcové hodnotě). Za tímto účelem jsou považovány čtyři mezery: mezera , vodorovná záložka , posuv řádků a návrat na začátek řádku . Zejména značka pořadí bajtů nesmí být generována odpovídající implementací (i když může být přijata při analýze JSON). JSON neposkytuje syntaxi pro komentáře .

Starší verze JSON (například podle RFC  4627 ) vyžadovaly, aby platný text JSON obsahoval pouze objekt nebo typ pole, který v nich mohl obsahovat jiné typy. Toto omezení bylo zrušeno v RFC  7158 , kde byl text JSON předefinován jako jakákoli serializovaná hodnota.

Čísla v JSON jsou agnostická s ohledem na jejich zastoupení v programovacích jazycích. I když to umožňuje serializaci čísel libovolné přesnosti , může to vést k problémům s přenositelností. Například, protože žádná diferenciace mezi celočíselné a s plovoucí desetinnou čárkou, některé implementace může léčit 42, 42.0a 4.2E+1jak je stejný počet, zatímco jiné ne. Standard JSON neklade žádné požadavky týkající se podrobností implementace, jako je přetečení , podtečení , ztráta přesnosti, zaokrouhlování nebo podepsané nuly , ale pro „dobrou interoperabilitu“ doporučuje očekávat pouze binary64 přesnost IEEE 754 . Neexistuje žádná inherentní ztráta přesnosti při serializaci binární reprezentace čísla s plovoucí desetinnou čárkou (jako binary64) na strojové úrovni do desítkové reprezentace čitelné pro člověka (jako čísla v JSON) a zpět, protože existují publikované algoritmy, které to dělají přesně a optimálně.

Komentáře byly záměrně vyloučeny z JSON. V roce 2012 Douglas Crockford popsal své návrhové rozhodnutí takto: „Odstranil jsem komentáře z JSON, protože jsem viděl, že je lidé používají k uchovávání směrnic analýzy, což je postup, který by zničil interoperabilitu.“

JSON zakazuje „koncové čárky“, čárku za poslední hodnotou uvnitř datové struktury. Koncové čárky jsou společným znakem derivátů JSON, které zlepšují snadné použití.

Sémantika

Zatímco JSON poskytuje syntaktický rámec pro výměnu dat, jednoznačná výměna dat také vyžaduje dohodu mezi producentem a spotřebitelem o sémantice konkrétního použití syntaxe JSON. Jedním příkladem, kde je taková dohoda nutná, je serializace datových typů definovaných syntaxí JavaScriptu, které nejsou součástí standardu JSON, např. Datum, Funkce, Regulární výraz a undefined.

Metadata a schéma

Oficiální typ MIME pro text JSON je " application/json" a většina moderních implementací to přijala. Neoficiální typ MIME " text/json" nebo typ obsahu " text/javascript" je také ze starších důvodů podporován mnoha poskytovateli služeb, prohlížeči, servery, webovými aplikacemi, knihovnami, frameworky a API. Mezi pozoruhodné příklady patří Google Search API, Yahoo !, Flickr, Facebook API, Lift framework a Dojo Toolkit 0.4.

Schéma JSON určuje formát založený na JSON, který definuje strukturu dat JSON pro ověřování, dokumentaci a řízení interakcí. Poskytuje smlouvu na data JSON požadovaná danou aplikací a způsob, jakým je lze tato data upravit. Schéma JSON je založeno na konceptech ze schématu XML (XSD), ale je založeno na JSON. Stejně jako v XSD lze pro schéma i data použít stejné nástroje pro serializaci/deserializaci, které se samy popisují. Je specifikován v internetovém konceptu na IETF, aktuálně v konceptu 2020–12, který byl vydán 28. ledna 2021. Pro různé programovací jazyky je k dispozici několik validátorů, každý s různou úrovní shody. Neexistuje žádná standardní přípona názvu souboru.

Standard JSON nepodporuje odkazy na objekty , ale existuje IETF koncept standardu pro odkazy na objekty založené na JSON. Sada nástrojů Dojo podporuje odkazy na objekty pomocí standardního JSON; konkrétně dojox.json.refmodul poskytuje podporu pro několik forem odkazování, včetně kruhového , vícenásobného, ​​mezizprávového a líného odkazování. Interně to oba dělají přiřazením "$ref"klíče pro takové reference a jeho vyřešením v čase analýzy; koncept IETF specifikuje pouze syntaxi adresy URL, ale Dojo umožňuje více. Alternativně existují nestandardní řešení, například použití ostrých proměnných JavaScriptu Mozilla. Tato funkce však zastarala s JavaScriptem 1.8.5 a byla odstraněna ve Firefoxu verze 12.

Využití

JSON-RPC je protokol vzdáleného volání procedur (RPC) postavený na JSON jako náhrada za XML-RPC nebo SOAP . Jedná se o jednoduchý protokol, který definuje pouze několik datových typů a příkazů. JSON-RPC umožňuje systému odesílat oznámení (informace na server, který nevyžaduje odpověď) a více volání na server, na které lze odpovědět mimo pořadí.

Asynchronní JavaScript a JSON (nebo AJAJ) odkazují na stejnou metodiku dynamických webových stránek jako Ajax , ale místo XML je formát dat JSON. AJAJ je technika webového vývoje, která umožňuje webové stránce požadovat nová data po načtení do webového prohlížeče . Obvykle vykresluje nová data ze serveru v reakci na akce uživatelů na této webové stránce. Například co uživatel zadá do vyhledávacího pole , kód na straně klienta pak odešle na server, který okamžitě odpoví rozevíracím seznamem odpovídajících položek databáze .

Přestože je JSON formátem serializace dat, zaznamenal použití ad hoc jako konfigurační jazyk . V tomto případě použití byla podpora komentářů a dalších funkcí považována za užitečnou, což vedlo k vytvoření několika nestandardních nadmnožin JSON . Mezi nimi jsou HJSON, HOCON a JSON5 (který navzdory svému názvu není pátou verzí JSON). Primárním cílem verze 1.2 YAML bylo vytvořit z nestandardního formátu přísnou nadmnožinu JSON.

V roce 2012 to Douglas Crockford řekl o komentářích v JSONu, když byl použit jako konfigurační jazyk: „Vím, že nedostatek komentářů některé lidi mrzí, ale nemělo by to. Předpokládejme, že používáte JSON k uchovávání konfiguračních souborů, což chcete přidat poznámky. Pokračujte a vložte všechny komentáře, které se vám líbí. Poté jej předejte do JSMinu, než jej předáte analyzátoru JSON. “

JSON je určen jako formát serializace dat . Jeho návrh jako podmnožiny JavaScriptu však může vést k mylné představě, že je bezpečné předávat texty JSON funkci JavaScript . To není bezpečné, protože některé platné texty JSON, konkrétně ty, které obsahují U+2028 LINE SEPARATOR nebo U+2029 PARAGRAPH SEPARATOR , nejsou platným kódem JavaScript, dokud nebyly v roce 2019 aktualizovány specifikace JavaScriptu, a proto jej starší motory nemusí podporovat. Aby se předešlo mnoha nástrahám způsobeným spuštěním libovolného kódu z internetu, byla do pátého vydání ECMAScript, který od roku 2017 podporují všechny hlavní prohlížeče , poprvé přidána nová funkce . U nepodporovaných prohlížečů poskytuje knihovnu JavaScript kompatibilní s API Douglas Crockford . Kromě toho návrh TC39 „Subsume JSON“ učinil z ECMAScript od revize jazyka 2019 přísnou nadmnožinu JSON. eval() JSON.parse()

Různé implementace analyzátoru JSON trpěly útokem Denial-of-Service a chybou hromadného přiřazení .

Porovnání s jinými formáty

JSON je propagován jako alternativa XML s nízkou režií, protože oba tyto formáty mají širokou podporu pro vytváření, čtení a dekódování v reálných situacích, kde se běžně používají. Kromě XML mohou příklady zahrnovat CSV a YAML (nadmnožinu JSON). Také Google Protocol Nárazníky může naplnit tuto úlohu, i když to není jazyk výměny dat.

YAML

YAML verze 1.2 je nadmnožinou JSON; předchozí verze nebyly striktně kompatibilní. Například únik lomítka /zpětným lomítkem \je platný v JSON, ale nebyl platný v YAML. YAML podporuje komentáře, zatímco JSON nikoli.

XML

XML byl použit k popisu strukturovaných dat a serializaci objektů. Existují různé protokoly založené na XML, které představují stejný druh datových struktur jako JSON pro stejný druh výměny dat. Data mohou být kódována v XML několika způsoby. Nejrozsáhlejší forma využívající dvojice značek má za následek mnohem větší reprezentaci než JSON, ale pokud jsou data uložena v atributech a formě 'short tag', kde je nahrazena koncová značka />, reprezentace má často přibližně stejnou velikost jako JSON nebo pouze trochu větší. Atribut XML však může mít pouze jednu hodnotu a každý atribut se může na každém prvku objevit maximálně jednou.

XML odděluje „data“ od „metadat“ (prostřednictvím použití prvků a atributů), zatímco JSON takový koncept nemá.

Dalším klíčovým rozdílem je adresování hodnot. JSON má objekty s jednoduchým mapováním „klíč“ k „hodnotě“, zatímco v XML se adresování děje na „uzlech“, které všechny obdrží jedinečné ID prostřednictvím procesoru XML. Standard XML navíc definuje společný atribut xml:id, který může uživatel použít k explicitnímu nastavení ID.

Jména XML značek nesmí obsahovat žádný ze znaků !"#$%&'()*+,/;<=>?@[\]^`{|}~, ani znak mezery a nesmí začínat -, .nebo numerická číslice, zatímco JSON klíče může (i když uvozovky a zpětné lomítko, musí být unikl).

Hodnoty XML jsou řetězce znaků , bez vestavěného zabezpečení typu . XML má koncept schématu , které umožňuje silné psaní, uživatelsky definované typy, předdefinované značky a formální strukturu, což umožňuje formální ověření toku XML. JSON má vestavěný silný typ psaní a má podobný koncept schématu ve schématu JSON .

XML podporuje komentáře, zatímco JSON nikoli.

Deriváty

Bylo vytvořeno několik formátů serializace nebo ze specifikace JSON. Mezi příklady patří GeoJSON , JSON-LD , Smile (formát pro výměnu dat) , UBJSON , JSON-RPC , JsonML a JSON → URL .

Viz také

Reference

externí odkazy