Preskočiť na obsah

JSON

z Wikipédie, slobodnej encyklopédie
JavaScript Object Notation
Logo formátu JSON je Möbiov list.

Logo formátu JSON je Möbiov list.
Prípona súboru.json
Typ formátuvýmena údajov
Rozširuje formátJavaScript
Otvorený formát?áno

JSON (z angl. JavaScript Object Notation, výslovnosť /ˈdʒeɪsən/ alebo /ˈdʒeɪˌsɒn/) je otvorený štandardný formát súborov a formát na výmenu údajov, ktorý na ukladanie a prenos dátových objektov používa text čitateľný pre človeka. Tieto objekty pozostávajú z dvojíc názov – hodnota a z polí (alebo z iných serializovateľných hodnôt). Ide o bežne používaný formát údajov s rozmanitým využitím pri elektronickej výmene údajov vrátane komunikácie webových aplikácií so servermi.

JSON je formát údajov nezávislý od programovacieho jazyka. Vznikol z jazyka JavaScript, no mnohé moderné programovacie jazyky obsahujú kód na generovanie a syntaktickú analýzu údajov vo formáte JSON. Súbory JSON majú príponu .json.

Formát JSON pôvodne špecifikoval Douglas Crockford na začiatku 21. storočia[1] a prvú správu vo formáte JSON odoslal v roku 2001 spolu s Chipom Morningstarom.

Názov a výslovnosť

[upraviť | upraviť zdroj]

Medzinárodná norma z roku 2017 (ECMA-404 a ISO/IEC 21778:2017) uvádza, že „JSON“ sa vyslovuje /ˈdʒeɪ·sən/, ako v názve „Jason and The Argonauts“ (Iasón a Argonauti).[2][3] Prvé vydanie normy ECMA-404 z roku 2013 sa výslovnosťou nezaoberalo.[4] Crockford v roku 2011 povedal: „O tom, ako to vyslovovať, sa veľa diskutuje, ale mne je to úplne jedno.“[1] Ďalšou bežnou výslovnosťou je /ˈdʒeɪˌsɒn/.[5]

Po tom, čo bol od roku 2006 k dispozícii dokument RFC 4627 ako jeho „informatívna“ špecifikácia, bol JSON prvýkrát štandardizovaný v roku 2013 ako norma ECMA-404.[4] Dokument RFC 8259 vydaný v roku 2017 je aktuálnou verziou internetového štandardu STD 90 a zostáva v súlade s normou ECMA-404.[6] V tom istom roku bol JSON štandardizovaný aj ako norma ISO/IEC 21778:2017.[2] Normy ECMA a ISO/IEC opisujú iba povolenú syntax, kým RFC sa zaoberá aj niektorými otázkami bezpečnosti a interoperability.[7]

Image
Douglas Crockford v budove spoločnosti Yahoo (2007).

JSON vznikol z potreby komunikačného protokolu medzi serverom a prehliadačom v reálnom čase bez použitia zásuvných modulov prehliadača, ako boli Flash alebo aplety v jazyku Java, ktoré na začiatku 21. storočia predstavovali prevládajúce metódy.[8]

Crockford formát JSON ako prvý špecifikoval a spopularizoval.[1] Skratka vznikla v spoločnosti State Software, ktorú Crockford spolu s ďalšími založil v marci 2001. Spoluzakladatelia sa dohodli, že vytvoria systém, ktorý bude používať štandardné schopnosti prehliadača a poskytne vrstvu abstrakcie, pomocou ktorej budú weboví vývojári vytvárať stavové webové aplikácie s trvalým obojsmerným spojením s webovým serverom. Spojenie sa udržiavalo tak, že dve spojenia protokolu HTTP zostávali otvorené a ak sa už neprenášali ďalšie údaje, recyklovali sa ešte pred uplynutím štandardného časového limitu prehliadača. Spoluzakladatelia pri okrúhlom stole hlasovali o tom, či formát údajov nazvú JSML (JavaScript Markup Language) alebo JSON (JavaScript Object Notation), a aj o tom, pod akým typom licencie ho sprístupnia. Webová stránka JSON.org[9] bola spustená v roku 2001. V decembri 2005 začala spoločnosť Yahoo! ponúkať niektoré zo svojich webových služieb vo formáte JSON.[10][11]

Predchodca knižníc JSON sa použil v projekte digitálnej hry na obchodovanie s predmetmi pre deti s názvom Cartoon Orbit v spoločnosti Communities.com,[12] ktorá používala zásuvný modul na strane prehliadača s proprietárnym formátom správ na manipuláciu s prvkami DHTML. Po objavení prvých možností technológie Ajax používali spoločnosti digiGroups, Noosh a ďalšie rámce (frames) na prenos informácií do zorného poľa prehliadača používateľa bez obnovenia vizuálneho kontextu webovej aplikácie. Dosahovali tak bohaté webové aplikácie fungujúce v reálnom čase iba so štandardnými možnosťami HTTP, HTML a JavaScriptu v prehliadačoch Netscape 4.0.5+ a Internet Explorer 5+. Crockford potom zistil, že JavaScript sa dá v takomto systéme použiť ako objektovo založený formát správ. Systém bol predaný spoločnostiam Sun Microsystems, Amazon.com a EDS (Electronic Data Systems).

JSON vychádzal z podmnožiny skriptovacieho jazyka JavaScript (konkrétne z normy ECMA-262, 3. vydanie – december 1999[13]) a bežne sa používa spolu s JavaScriptom, je to však formát údajov nezávislý od jazyka. Kód na syntaktickú analýzu a generovanie údajov JSON je ľahko dostupný v mnohých programovacích jazykoch. Webová stránka JSON uvádza knižnice pre JSON podľa jazykov.

V októbri 2013 vydala organizácia Ecma International prvé vydanie svojej normy JSON ECMA-404.[4] V tom istom roku použil dokument RFC 7158 normu ECMA-404 ako referenciu. V roku 2014 sa hlavnou referenciou pre použitie JSON na internete stal dokument RFC 7159, ktorý nahradil RFC 4627 a RFC 7158 (ako hlavné referencie však ponechal ECMA-262 a ECMA-404). V novembri 2017 vydal podvýbor ISO/IEC JTC 1/SC 22 normu ISO/IEC 21778:2017[2] ako medzinárodnú normu. Dňa 13. decembra 2017 organizácia Internet Engineering Task Force označila RFC 7159 za zastaraný, keď vydala RFC 8259, ktorý je aktuálnou verziou internetového štandardu STD 90.[6]

Crockford pridal do licencie JSON klauzulu „Softvér sa má používať na dobro, nie na zlo“ (The Software shall be used for Good, not Evil), aby mohol knižnice JSON uvoľniť ako open source a zároveň si uťahovať z firemných právnikov a z prehnane puntičkárskych ľudí. Táto klauzula však na druhej strane spôsobila problémy s kompatibilitou licencie JSON s inými licenciami open source, keďže open-source softvér a slobodný softvér zvyčajne nepripúšťajú nijaké obmedzenia účelu použitia.[14]

Nasledujúci príklad ukazuje možnú reprezentáciu údajov opisujúcich osobu vo formáte JSON.

{
  "first_name": "John",
  "last_name": "Smith",
  "is_alive": true,
  "age": 27,
  "address": {
    "street_address": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postal_code": "10021-3100"
  },
  "phone_numbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [
    "Catherine",
    "Thomas",
    "Trevor"
  ],
  "spouse": null
}

Kódovanie znakov

[upraviť | upraviť zdroj]

Hoci Crockford pôvodne tvrdil, že JSON je striktnou podmnožinou jazykov JavaScript a ECMAScript,[15] jeho špecifikácia v skutočnosti pripúšťa platné dokumenty JSON, ktoré nie sú platným JavaScriptom: JSON povoľuje, aby sa unicodové oddeľovače riadkov U+2028 LINE SEPARATOR a U+2029 PARAGRAPH SEPARATOR vyskytovali v reťazcoch v úvodzovkách bez zápisu escape sekvenciou, kým ECMAScript 2018 a staršie verzie to nepovoľujú.[16][17] Je to dôsledok toho, že JSON zakazuje iba „riadiace znaky“. Kvôli maximálnej prenositeľnosti sa tieto znaky zapisujú pomocou spätnej lomky (escape sekvenciou).

Výmena údajov JSON v otvorenom ekosystéme musí byť kódovaná v UTF-8.[6] Toto kódovanie podporuje celú znakovú sadu Unicode vrátane znakov mimo základnej viacjazyčnej roviny (U+0000 až U+FFFF). Ak sa však tieto znaky zapisujú escape sekvenciou, musia sa zapísať ako náhradné páry (surrogate pairs) kódovania UTF-16. Napríklad znak emodži U+1F610 NEUTRAL FACE možno do JSON zapísať takto:

{ "face": "😐" }

alebo takto:

{ "face": "😐" }

Striktnou podmnožinou jazyka ECMAScript sa JSON stal od revízie tohto jazyka z roku 2019.[17][18]

Dátové typy

[upraviť | upraviť zdroj]

Základné dátové typy JSON sú:

  • Číslo (number): desatinné číslo so znamienkom, ktoré môže obsahovať desatinnú časť a môže používať exponenciálny zápis (E notation), nemôže však obsahovať hodnoty, ktoré nie sú čísla, ako NaN. Formát nerozlišuje medzi celými číslami a číslami s pohyblivou rádovou čiarkou. JavaScript používa pre všetky číselné hodnoty formát s pohyblivou rádovou čiarkou s dvojnásobnou presnosťou podľa normy IEEE 754 (neskôr podporuje aj typ BigInt pre čísla s ľubovoľnou presnosťou[19]), iné jazyky implementujúce JSON však môžu čísla kódovať inak.
  • Reťazec (string): postupnosť nula alebo viacerých znakov Unicode. Reťazce sú ohraničené dvojitými úvodzovkami a podporujú zápis escape sekvencií pomocou spätnej lomky.
  • Logická hodnota (boolean): jedna z hodnôt true alebo false.
  • Pole (array): usporiadaný zoznam nula alebo viacerých prvkov, z ktorých každý môže byť ľubovoľného typu. Polia sa zapisujú v hranatých zátvorkách a prvky sa oddeľujú čiarkami.
  • Objekt (object): kolekcia dvojíc názov – hodnota, v ktorých sú názvy (nazývané aj kľúče) reťazcami. Aktuálna norma ECMA uvádza: „Syntax JSON nekladie nijaké obmedzenia na reťazce používané ako názvy, nevyžaduje, aby boli reťazce názvov jedinečné, a nepripisuje nijaký význam poradiu dvojíc názov/hodnota.“[20] Objekty sú ohraničené zloženými zátvorkami a jednotlivé dvojice sa oddeľujú čiarkami, pričom v rámci každej dvojice oddeľuje kľúč čiže názov od hodnoty znak dvojbodky „:“.
  • null: prázdna hodnota zapisovaná slovom null.

Biele znaky sú povolené a ignorujú sa okolo syntaktických prvkov alebo medzi nimi (hodnotami a interpunkciou, nie však vnútri reťazcovej hodnoty). Za biele znaky sa na tento účel považujú štyri konkrétne znaky: medzera, vodorovný tabulátor, posun riadka (line feed) a návrat vozíka (carriage return). Najmä značku poradia bajtov (byte order mark) nesmie vyhovujúca implementácia generovať (pri syntaktickej analýze JSON ju však môže akceptovať).[21][22]

Prvé verzie JSON (napríklad podľa špecifikácie RFC 4627) vyžadovali, aby platný text JSON pozostával iba z objektu alebo poľa, ktoré mohli v sebe obsahovať ďalšie typy. Toto obmedzenie bolo zrušené v RFC 7158, kde bol text JSON nanovo definovaný ako ľubovoľná serializovaná hodnota.

Čísla v JSON sú agnostické voči svojej reprezentácii v programovacích jazykoch. Hoci to umožňuje serializovať čísla s ľubovoľnou presnosťou, môže to viesť k problémom s prenositeľnosťou. Keďže sa napríklad nerozlišuje medzi celými číslami a hodnotami s pohyblivou rádovou čiarkou, niektoré implementácie môžu považovať 42, 42.0 a 4.2E+1 za to isté číslo, kým iné nie. Norma JSON nekladie nijaké požiadavky na podrobnosti implementácie, ako je pretečenie, podtečenie, strata presnosti, zaokrúhľovanie či záporná nula, odporúča však v záujme „dobrej interoperability“ neočakávať väčšiu presnosť, ako poskytuje formát binary64 podľa IEEE 754. Serializácia strojovej binárnej reprezentácie čísla s pohyblivou rádovou čiarkou (napríklad binary64) do desiatkovej reprezentácie čitateľnej pre človeka (ako sú čísla v JSON) a späť nemusí so sebou nevyhnutne prinášať stratu presnosti; existujú publikované algoritmy, ktoré tento prevod vykonávajú presne a optimálne.[23]

Komentáre

[upraviť | upraviť zdroj]

JSON neposkytuje syntax pre komentáre.[24] Komentáre boli z JSON vylúčené zámerne. Douglas Crockford v roku 2012 toto návrhové rozhodnutie opísal takto: „Odstránil som komentáre z JSON, pretože som videl, že ich ľudia používajú na uloženie direktív pre syntaktický analyzátor, čo je prax, ktorá by zničila interoperabilitu.“[24]

Kontrola syntaxe

[upraviť | upraviť zdroj]

JSON nepovoľuje takzvané koncové čiarky (trailing commas), teda čiarku za poslednou hodnotou vo vnútri dátovej štruktúry.[25] Koncové čiarky sú bežnou vlastnosťou formátov odvodených od JSON, ktorá uľahčuje ich používanie.[26]

Interoperabilita

[upraviť | upraviť zdroj]

RFC 8259 opisuje niektoré aspekty syntaxe JSON, ktoré sú síce podľa špecifikácií prípustné, môžu však spôsobovať problémy s interoperabilitou.[6]

  • Niektoré implementácie JSON akceptujú iba texty JSON, ktoré predstavujú objekt alebo pole. V záujme interoperability by aplikácie vymieňajúce si JSON mali posielať správy, ktoré sú objektmi alebo poliami.
  • Špecifikácie povoľujú objekty JSON, ktoré obsahujú viacero členov s rovnakým názvom. Správanie implementácií spracúvajúcich objekty s duplicitnými názvami je nepredvídateľné. V záujme interoperability by sa aplikácie mali duplicitným názvom pri prenose objektov JSON vyhýbať.
  • Špecifikácie výslovne uvádzajú, že poradie členov v objektoch JSON nie je významné. V záujme interoperability by aplikácie nemali pripisovať poradiu členov nijaký význam, a to ani vtedy, keď ho softvér na syntaktickú analýzu sprístupňuje.
  • Hoci špecifikácie nekladú nijaké obmedzenia na veľkosť ani presnosť číselných literálov JSON, rozšírená implementácia v JavaScripte ich ukladá ako hodnoty typu binary64 podľa IEEE 754. V záujme interoperability by sa aplikácie mali vyhýbať prenosu čísel, ktoré sa takto reprezentovať nedajú, napríklad 1E400 alebo 3.141592653589793238462643383279.
  • Staršie špecifikácie JSON organizácie IETF nevyžadovali kódovanie UTF-8, RFC 8259 však vyžaduje, aby text JSON vymieňaný medzi systémami, ktoré nie sú súčasťou uzavretého ekosystému, bol kódovaný v UTF-8.
  • Špecifikácie nezakazujú prenos postupností bajtov, ktoré nesprávne reprezentujú znaky Unicode. V záujme interoperability by aplikácie mali posielať správy, ktoré takéto postupnosti bajtov neobsahujú.
  • Špecifikácia neurčuje, ako majú aplikácie porovnávať reťazce Unicode. V záujme interoperability by aplikácie mali takéto porovnania vždy vykonávať po jednotlivých kódových jednotkách.

V roku 2015 vydala IETF dokument RFC 7493, ktorý opisuje formát správ „I-JSON“ – obmedzený profil JSON, ktorý ohraničuje syntax a spracovanie JSON tak, aby sa týmto problémom s interoperabilitou v čo najväčšej miere predišlo.

Sémantika

[upraviť | upraviť zdroj]

Hoci JSON poskytuje syntaktický rámec na výmenu údajov, jednoznačná výmena údajov si vyžaduje aj dohodu medzi tvorcom a príjemcom o sémantike konkrétneho použitia syntaxe JSON.[27] Príkladom, kde je takáto dohoda potrebná, je serializácia dátových typov, ktoré nie sú súčasťou normy JSON, napríklad dátumov a regulárnych výrazov.

Metaúdaje a schéma

[upraviť | upraviť zdroj]

Oficiálny typ MIME pre text JSON je application/json[28] a väčšina moderných implementácií ho prijala. Medzi staršie typy MIME patria text/json, text/x-json a text/javascript.[29] Štandardná prípona súboru je .json.[30]

JSON Schema špecifikuje formát založený na JSON, ktorý definuje štruktúru údajov JSON na účely validácie, dokumentácie a riadenia interakcie. Poskytuje „zmluvu“ o tom, aké údaje JSON daná aplikácia vyžaduje a ako sa tieto údaje môžu meniť.[31] JSON Schema vychádza z konceptov jazyka XML Schema (XSD), je však založená na JSON. Rovnako ako pri XSD sa na schému aj na údaje môžu používať tie isté nástroje na serializáciu a deserializáciu a schéma opisuje sama seba. Je špecifikovaná v internetovom návrhu (Internet Draft) organizácie IETF, pričom najnovšou verziou bola k roku 2024 verzia „Draft 2020-12“.[32] Pre rôzne programovacie jazyky existuje niekoľko validátorov,[33] pričom každý z nich vyhovuje špecifikácii v inej miere.

Norma JSON nepodporuje odkazy (referencie) na objekty, existuje však návrh normy IETF pre odkazy na objekty založené na JSON.[34]

JSON-RPC je protokol na vzdialené volanie procedúr (RPC) postavený na JSON, ktorý nahrádza XML-RPC alebo SOAP. Je to jednoduchý protokol, ktorý definuje iba niekoľko dátových typov a príkazov. JSON-RPC umožňuje systému posielať notifikácie (informácie pre server, ktoré nevyžadujú odpoveď) a viacero volaní servera, na ktoré sa môže odpovedať v ľubovoľnom poradí.

Asynchronous JavaScript and JSON (skrátene AJAJ) označuje rovnakú metodiku dynamických webových stránok ako Ajax, no namiesto XML sa ako formát údajov používa JSON. AJAJ je technika vývoja webu, ktorá umožňuje webovej stránke vyžiadať si nové údaje aj po tom, ako sa načítala vo webovom prehliadači. Spravidla zobrazuje nové údaje zo servera ako reakciu na činnosť používateľa na danej webovej stránke. Napríklad to, čo používateľ píše do vyhľadávacieho poľa, odošle kód na strane klienta serveru, ktorý okamžite odpovie rozbaľovacím zoznamom zodpovedajúcich položiek z databázy.

JSON sa ad hoc používa aj ako jazyk konfiguračných súborov, hoci nemá natívnu podporu komentárov (pozri časť Komentáre).

Databáza MongoDB používa pre svoju dokumentovo orientovanú databázu údaje podobné JSON.

Niektoré relačné databázy pridali podporu natívnych dátových typov JSON, napríklad typ JSONB v systéme PostgreSQL[35] a typ JSON v systéme MySQL.[36] Vývojári tak môžu vkladať údaje JSON priamo, bez potreby ich prevodu do iného formátu.

Bezpečnosť

[upraviť | upraviť zdroj]

To, že JSON je podmnožinou JavaScriptu, môže viesť k mylnej predstave, že je bezpečné odovzdávať texty JSON javascriptovej funkcii eval(). Nie je to bezpečné, pretože niektoré platné texty JSON, konkrétne tie, ktoré obsahujú znaky U+2028 LINE SEPARATOR alebo U+2029 PARAGRAPH SEPARATOR, neboli platným kódom JavaScriptu, kým sa špecifikácie JavaScriptu v roku 2019 neaktualizovali, a staršie interpretery ich preto nemusia podporovať.[16] Aby sa predišlo mnohým nástrahám spôsobeným vykonávaním ľubovoľného kódu z internetu, bola do piateho vydania normy ECMAScript prvýkrát pridaná nová funkcia JSON.parse(),[37] ktorú k roku 2017 podporujú všetky hlavné prehliadače. Pre prehliadače, ktoré ju nepodporujú, poskytuje Douglas Crockford knižnicu v JavaScripte s kompatibilným API.[38] Okrem toho návrh TC39 „Subsume JSON“ urobil z jazyka ECMAScript od jeho revízie z roku 2019 striktnú nadmnožinu JSON.[17][18] Rôzne implementácie syntaktických analyzátorov JSON trpeli zraniteľnosťami typu útok odoprenia služby (denial of service) a hromadné priradenie (mass assignment).[39][40]

Alternatívy

[upraviť | upraviť zdroj]

JSON sa propaguje ako alternatíva k XML s nízkou réžiou, keďže oba formáty majú v reálnych situáciách, v ktorých sa bežne používajú, rozsiahlu podporu na vytváranie, čítanie a dekódovanie.[41] V závislosti od konkrétneho prípadu použitia patria medzi alternatívy k JSON:

  • Z textových formátov CSV a nadmnožiny JSON (pozri nižšie). Textový formát, ktorý je nadmnožinou JSON, ponúka aj formát Ion (širší rozsah primitívnych typov, anotácie, komentáre a povolené koncové čiarky).[42]
  • Na rýchlejšie spracovanie za cenu horšej čitateľnosti pre človeka slúžia formáty na výmenu údajov, ktoré dokážu vyjadriť všetky objekty JSON (t. j. ich dátový model je nadmnožinou dátového modelu JSON), napríklad CBOR (štandard IETF RFC) a binárny Ion.[42] Túto úlohu môžu plniť aj Google Protocol Buffers, keďže ich možno analyzovať aj bez schémy, nie sú však určené ako jazyk na výmenu údajov. Okrem toho databázy ako SQLite a PostgreSQL majú vlastné interné binárne reprezentácie nazývané „JSONB“, ktoré nie sú určené na použitie navonok.[43]
Bližšie informácie v hlavnom článku: XML

XML sa používa na opis štruktúrovaných údajov a na serializáciu objektov. Existujú rôzne protokoly založené na XML, ktoré reprezentujú rovnaký druh dátových štruktúr ako JSON na rovnaké účely výmeny údajov. Údaje možno v XML zakódovať viacerými spôsobmi. Najrozsiahlejšia forma s použitím párových značiek vedie k oveľa väčšej reprezentácii (počtom znakov) ako JSON, ak sa však údaje ukladajú do atribútov a používa sa skrátený zápis značky, v ktorom sa uzatváracia značka nahradí znakmi />, reprezentácia má často približne rovnakú veľkosť ako JSON alebo je len o niečo väčšia.[44] Atribút XML však môže mať iba jednu hodnotu a každý atribút sa v každom prvku môže vyskytnúť najviac raz.

XML oddeľuje údaje od metaúdajov (pomocou prvkov a atribútov), kým JSON takýto koncept nemá.

Ďalším kľúčovým rozdielom je adresovanie hodnôt. JSON má objekty s jednoduchým mapovaním kľúča na hodnotu, kým v XML sa adresuje pomocou uzlov, z ktorých každý dostane od procesora XML jedinečný identifikátor. Norma XML navyše definuje spoločný atribút xml:id, ktorý môže používateľ použiť na explicitné nastavenie identifikátora.

Názvy značiek XML nemôžu obsahovať nijaký zo znakov !"#$%&'()*+,/;<=>?@[\]^`{|}~ ani znak medzery a nemôžu sa začínať znakom -, . ani číslicou, kým kľúče JSON môžu (hoci úvodzovky a spätná lomka sa musia zapísať escape sekvenciou).[45]

Hodnoty v XML sú reťazce znakov bez vstavanej typovej bezpečnosti. XML má koncept schémy, ktorá umožňuje silné typovanie, používateľom definované typy, preddefinované značky a formálnu štruktúru, a tým aj formálnu validáciu toku XML. JSON má niekoľko vstavaných typov a podobný koncept schémy v podobe JSON Schema.

XML podporuje komentáre, kým JSON nie.[46][24]

Nadmnožiny

[upraviť | upraviť zdroj]

Podpora komentárov a ďalšie vlastnosti sa ukázali ako užitočné, čo viedlo k vytvoreniu viacerých neštandardných nadmnožín JSON. Patria medzi ne HJSON,[47] HOCON a JSON5 (ktorý napriek svojmu názvu nie je piatou verziou JSON).[48][49]

Bližšie informácie v hlavnom článku: YAML

YAML vo verzii 1.2 je nadmnožinou JSON; predchádzajúce verzie neboli striktne kompatibilné. Napríklad zápis lomky / pomocou spätnej lomky \ je v JSON platný, no v YAML platný nebol.[50] YAML podporuje komentáre, kým JSON nie.[50][48][24]

CSON („CoffeeScript Object Notation“) používa významové odsadenie a kľúče bez úvodzoviek a predpokladá deklaráciu vonkajšieho objektu. Používal sa na konfiguráciu textového editora Atom od spoločnosti GitHub.[51][52][53]

Existuje aj nesúvisiaci projekt s názvom CSON („Cursive Script Object Notation“), ktorý je syntakticky bližší JSON.[54]

HOCON („Human-Optimized Config Object Notation“) je formát údajov čitateľných pre človeka a nadmnožina JSON.[55] HOCON sa používa takto:

  • Používa sa najmä spolu s frameworkom Play[56] a vyvíja ho spoločnosť Lightbend.
  • Ako konfiguračný formát ho podporujú aj projekty na platforme .NET prostredníctvom knižnice Akka.NET[57][58] a nástroj Puppet.[59]
  • TIBCO Streaming:[60] HOCON je od vydania TIBCO Streaming 10 primárnym formátom konfiguračných súborov pre produktovú rodinu TIBCO Streaming[61] (StreamBase, LiveView a Artifact Management Server).[62]
  • Je aj primárnym formátom konfiguračných súborov niekoľkých podsystémov produktu Exabeam Advanced Analytics.[63]
  • Softvér Jitsi ho používa ako „nový“ konfiguračný systém a ako záložné riešenie súbory .properties.[64][65]

JSON5 („JSON5 Data Interchange Format“) je rozšírenie syntaxe JSON, ktoré je rovnako ako JSON aj platnou syntaxou jazyka JavaScript. Práca na špecifikácii sa začala v roku 2012 a ukončila sa v roku 2018 verziou 1.0.0.[66][26] Hlavné rozdiely oproti syntaxi JSON sú:

  • nepovinné koncové čiarky,
  • kľúče objektov bez úvodzoviek,
  • reťazce v jednoduchých úvodzovkách a viacriadkové reťazce,
  • ďalšie formáty čísel,
  • komentáre.

Syntax JSON5 podporuje niektorý softvér ako rozšírenie syntaxe JSON, napríklad databáza SQLite.[67]

JSONC (JSON with Comments) je podmnožina JSON5, ktorú používa editor Visual Studio Code od spoločnosti Microsoft:[68][69]

  • podporuje jednoriadkové komentáre (//) aj blokové komentáre (/* */),[70]
  • akceptuje koncové čiarky, neodporúča ich však a editor pri nich zobrazí varovanie.

Odvodené formáty

[upraviť | upraviť zdroj]

Na základe špecifikácie JSON alebo z nej vzniklo niekoľko formátov serializácie. Patria medzi ne:

  • GeoJSON – formát určený na reprezentáciu jednoduchých geografických prvkov[71][72]
  • JSON-LD – metóda kódovania prepojených údajov (linked data) pomocou JSON[73][74]
  • JSON-RPC – protokol na vzdialené volanie procedúr kódovaný v JSON[75]
  • JsonML – odľahčený značkovací jazyk na mapovanie medzi XML a JSON[76][77]
  • Smile (formát na výmenu údajov)[78]
  • UBJSON – binárny formát na výmenu údajov napodobňujúci JSON, ktorý však vyžaduje menej bajtov údajov[79][80]
  • Jsonnet – doménovo špecifický jazyk založený na prototypoch, ktorý vytvára súbory JSON. Všetky dokumenty JSON sú platnými programami v jazyku Jsonnet, ktoré sa pri spustení vypíšu nezmenené. Jsonnet rozširuje JSON o podporu premenných, importov, cyklov, komentárov a ďalších prvkov.[81][82] Jsonnet sa používa ako konfiguračný jazyk pri inžinierstve cloudovej infraštruktúry.[83]

Referencie

[upraviť | upraviť zdroj]
  1. 1 2 3 CROCKFORD, Douglas. The JSON Saga (prepis prednášky) [online]. YUI Library / Transcript Vids, 2011-08-28, [cit. 2026-10-05]. Dostupné online. Archivované 2019-10-30 z originálu. (po anglicky)
  2. 1 2 3 ISO/IEC 21778:2017 Information technology — The JSON data interchange syntax [online]. ISO, [cit. 2025-06-24]. Dostupné online. Archivované 2026-01-02 z originálu. (po anglicky)
  3. ↑ ECMA-404: The JSON Data Interchange Syntax [online]. Ecma International, 2017-12, [cit. 2024-04-29]. Dostupné online. Archivované 2019-10-27 z originálu. (po anglicky) 2. vydanie, s. iii, poznámka pod čiarou.
  4. 1 2 3 ECMA-404: The JSON Data Interchange Format [online]. Ecma International, 2013-10, [cit. 2023-11-20]. Dostupné online. Archivované 2013-11-01 z originálu. (po anglicky) 1. vydanie.
  5. ↑ SWEIGART, Al. Automate the Boring Stuff with Python: Practical Programming for Total Beginners. [s.l.] : No Starch Press, 2015. [cit. 2026-10-06]. Dostupné online. ISBN 9781593276850. S. 319. (po anglicky) „pronounced 'JAY-sawn' or 'Jason'—it doesn't matter how because either way people will say you're pronouncing it wrong“
  6. 1 2 3 4 BRAY, Tim. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format [online]. Internet Engineering Task Force, 2017-12, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  7. ↑ BRAY, Tim. JSON Redux AKA RFC7159 [online]. Ongoing, [cit. 2014-03-16]. Dostupné online. (po anglicky)
  8. ↑ Unofficial Java History [online]. Edu4Java, 2014-05-26, [cit. 2019-08-30]. Dostupné online. Archivované 2014-05-26 z originálu. (po anglicky)
  9. ↑ JSON [online]. json.org, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  10. ↑ Yahoo!. Using JSON with Yahoo! Web services [online]. Yahoo!, [cit. 2026-10-06]. Dostupné online. Archivované 2006-01-01 z originálu. (po anglicky)
  11. ↑ WILLISON, Simon. JSON and Yahoo!'s JavaScript APIs [online]. Simon Willison's Weblog, 2005-12-16, [cit. 2026-10-06]. Dostupné online. (po anglicky)
  12. ↑ CROCKFORD, Douglas. About Douglas Crockford [online]. crockford.com, [cit. 2026-10-06]. Dostupné online. (po anglicky)
  13. ↑ CROCKFORD, Douglas. Introducing JSON [online]. json.org, 2009-05-28, [cit. 2009-07-03]. Dostupné online. (po anglicky)
  14. ↑ EDGE, Jake. Apache and the JSON license [online]. LWN.net, 2016-11-30, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  15. ↑ CROCKFORD, Douglas. JSON in JavaScript [online]. json.org, 2016-07-10, [cit. 2016-08-13]. Dostupné online. Archivované 2016-07-10 z originálu. (po anglicky)
  16. 1 2 HOLM, Magnus. JSON: The JavaScript subset that isn't [online]. The timeless repository, 2011-05-15, [cit. 2016-09-23]. Dostupné online. Archivované 2012-05-13 z originálu. (po anglicky)
  17. 1 2 3 Subsume JSON: Proposal to make all JSON text valid ECMA-262 [online]. Ecma TC39, 2019-08-23, [cit. 2019-08-27]. Dostupné online. (po anglicky)
  18. 1 2 Advance to Stage 4 - tc39/proposal-json-superset [online]. GitHub, 2018-05-22, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  19. ↑ BigInt - MDN Web doc glossary [online]. Mozilla, [cit. 2020-10-18]. Dostupné online. (po anglicky)
  20. ↑ ECMA-404: The JSON Data Interchange Syntax [online]. Ecma International, 2017-12, [cit. 2024-04-29]. Dostupné online. Archivované 2019-10-27 z originálu. (po anglicky) 2. vydanie, s. 3: „The JSON syntax does not impose any restrictions on the strings used as names, does not require that name strings be unique, and does not assign any significance to the ordering of name/value pairs.“
  21. ↑ BRAY, Tim. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format, 2. JSON Grammar [online]. Internet Engineering Task Force, 2017-12, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  22. ↑ BRAY, Tim. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format, 8.1. Character Encoding [online]. Internet Engineering Task Force, 2017-12, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  23. ↑ ANDRYSCO, Marc, Ranjit Jhala, Sorin Lerner Printing Floating-Point Numbers: An Always Correct Method [online]. University of California, San Diego, 2016-02-18, [cit. 2025-05-31]. Dostupné online. (po anglicky)
  24. 1 2 3 4 Douglas Crockford: Comments in JSON. Príspevok na sociálnej sieti Google+, 30. apríla 2012 (archivovaná kópia vo Wayback Machine z 30. júla 2016, citované 2019-08-30). (po anglicky)
  25. ↑ Trailing commas - JavaScript [online]. MDN Web Docs, 2023-09-12, [cit. 2023-12-16]. Dostupné online. (po anglicky)
  26. 1 2 JSON5 [online]. json5, [cit. 2020-12-16]. Dostupné online. Archivované 2020-11-29 z originálu. (po anglicky)
  27. ↑ ECMA-404: The JSON Data Interchange Syntax [online]. Ecma International, 2017-12, [cit. 2024-04-29]. Dostupné online. Archivované 2019-10-27 z originálu. (po anglicky) 2. vydanie, s. iii: „The JSON syntax is not a specification of a complete data interchange. Meaningful data interchange requires agreement between a producer and consumer on the semantics attached to a particular use of the JSON syntax. What JSON does provide is the syntactic framework to which such semantics can be attached“
  28. ↑ Media Types [online]. iana.org, [cit. 2015-09-13]. Dostupné online. (po anglicky)
  29. ↑ Correct Content-Type Header for JSON [online]. ReqBin, 2023-01-13, [cit. 2024-03-23]. Dostupné online. (po anglicky)
  30. ↑ BRAY, Tim. 11. IANA Considerations. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format (IETF), 2017-12. Dostupné online. DOI: 10.17487/RFC8259. (po anglicky)
  31. ↑ JSON Schema and Hyper-Schema [online]. json-schema.org, [cit. 2021-06-08]. Dostupné online. (po anglicky)
  32. ↑ JSON Schema - Specification Links [online]. json-schema.org, [cit. 2024-03-22]. Dostupné online. (po anglicky)
  33. ↑ JSON Schema Implementations [online]. json-schema.org, [cit. 2021-06-08]. Dostupné online. Archivované 2021-06-16 z originálu. (po anglicky)
  34. ↑ ZYP, Kris. JSON Reference: draft-pbryan-zyp-json-ref-03. Internet Engineering Task Force, 2012-09-16. Dostupné online. (po anglicky)
  35. ↑ 8.14. JSON Types [online]. PostgreSQL Global Development Group (PostgreSQL 18 Documentation), [cit. 2026-10-06]. Dostupné online. (po anglicky)
  36. ↑ The JSON data type [online]. dev.mysql.com, [cit. 2025-04-01]. Dostupné online. (po anglicky)
  37. ↑ ECMA-262: ECMAScript Language Specification [online]. Ecma International, 2009-12, [cit. 2011-03-18]. Dostupné online. Archivované 2011-04-14 z originálu. (po anglicky) 5. vydanie.
  38. ↑ douglascrockford/JSON-js [online]. GitHub, 2019-08-13, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  39. ↑ Denial of Service and Unsafe Object Creation Vulnerability in JSON (CVE-2013-0269) [online]. ruby-lang.org, [cit. 2016-01-05]. Dostupné online. (po anglicky)
  40. ↑ Microsoft .NET Framework JSON Content Processing Denial of Service Vulnerability [online]. Cisco, [cit. 2016-01-05]. Dostupné online. Archivované 2018-11-06 z originálu. (po anglicky)
  41. ↑ JSON: The Fat-Free Alternative to XML [online]. json.org, [cit. 2011-03-14]. Dostupné online. (po anglicky)
  42. 1 2 Amazon Ion [online]. Amazon, [cit. 2024-08-26]. Dostupné online. Archivované 2024-08-12 z originálu. (po anglicky)
  43. ↑ The SQLite JSONB Format [online]. sqlite.org, [cit. 2026-10-05]. Dostupné online. (po anglicky)
  44. ↑ LEE, David. Fat Markup: Trimming the Fat Markup Myth one calorie at a time. Balisage: The Markup Conference 2013, Montréal, 2013-08-06. Dostupné online. DOI: 10.4242/BalisageVol10.Lee01. (po anglicky)
  45. ↑ XML 1.1 Specification [online]. World Wide Web Consortium, [cit. 2019-08-26]. Dostupné online. (po anglicky)
  46. ↑ SATERNOS, Casimir. Client-server web apps with Javascript and Java. [s.l.] : O'Reilly Media, 2014. Dostupné online. ISBN 9781449369316. S. 45. (po anglicky)
  47. ↑ EDELMAN, Jason; LOWE, Scott; OSWALT, Matt. Network Programmability and Automation. [s.l.] : O'Reilly Media. (po anglicky) „for data representation you can pick one of the following: YAML, YAMLEX, JSON, JSON5, HJSON, or even pure Python“
  48. 1 2 MCCOMBS, Thayne. Why JSON isn't a good configuration language [online]. Lucid Chart, 2018-07-16, [cit. 2019-06-15]. Dostupné online. (po anglicky)
  49. ↑ HOCON (Human-Optimized Config Object Notation) [online]. GitHub, 2019-01-28, [cit. 2019-08-28]. Dostupné online. (po anglicky) „The primary goal is: keep the semantics (tree structure; set of types; encoding/escaping) from JSON, but make it more convenient as a human-editable config file format.“
  50. 1 2 YAML Ain't Markup Language (YAML) version 1.2 – Revision 1.2.2 [online]. yaml.org, 2021-10-01, [cit. 2026-10-06]. Dostupné online. (po anglicky)
  51. ↑ DOHM, Lee. CoffeeScript Object Notation [online]. The Big Book of Atom, 2014, [cit. 2024-04-29]. Dostupné online. Archivované 2023-04-22 z originálu. (po anglicky)
  52. ↑ Basic Customization [online]. Atom Flight Manual, GitHub, [cit. 2024-04-29]. Dostupné online. Archivované 2024-04-29 z originálu. (po anglicky)
  53. ↑ CSON [online]. Bevry (GitHub), 2023-12-20, [cit. 2024-04-29]. Dostupné online. Archivované 2024-04-23 z originálu. (po anglicky)
  54. ↑ SEONGHOON, Kang. CSON [online]. GitHub, 2021-07-01, [cit. 2023-02-27]. Dostupné online. Archivované 2023-12-16 z originálu. (po anglicky)
  55. ↑ config/HOCON.md at master · lightbend/config [online]. GitHub, [cit. 2021-08-05]. Dostupné online. (po anglicky)
  56. ↑ Config File - 2.5.x [online]. www.playframework.com, [cit. 2021-08-05]. Dostupné online. (po anglicky)
  57. ↑ HOCON Syntax and Practices in Akka.NET [online]. Akka.NET Documentation (getakka.net), [cit. 2026-10-06]. Dostupné online. (po anglicky)
  58. ↑ Akka.NET Documentation [online]. getakka.net, [cit. 2021-08-05]. Dostupné online. (po anglicky)
  59. ↑ Managing HOCON configuration files with Puppet [online]. Puppet, [cit. 2023-03-04]. Dostupné online. Archivované 2017-02-11 z originálu. (po anglicky)
  60. ↑ StreamBase Documentation [online]. docs.streambase.com, [cit. 2021-08-05]. Dostupné online. (po anglicky)
  61. ↑ Configuration Guide [online]. docs.streambase.com, [cit. 2021-08-05]. Dostupné online. (po anglicky)
  62. ↑ StreamBase New and Noteworthy Archive [online]. docs.streambase.com, [cit. 2021-08-05]. Dostupné online. (po anglicky)
  63. ↑ Exabeam Advanced Analytics Release Notes [online]. Exabeam, [cit. 2023-03-04]. Dostupné online. Archivované 2020-10-20 z originálu. (po anglicky)
  64. ↑ JITSI Project. Config phase 1 [online]. GitHub, [cit. 2021-02-16]. Dostupné online. (po anglicky)
  65. ↑ JITSI Project. reference.conf [online]. GitHub, [cit. 2021-02-16]. Dostupné online. (po anglicky)
  66. ↑ The JSON5 Data Interchange Format [online]. spec.json5.org, [cit. 2022-06-25]. Dostupné online. (po anglicky)
  67. ↑ SQLite. JSON Functions And Operators [online]. sqlite.org, [cit. 2023-06-25]. Dostupné online. (po anglicky)
  68. ↑ JSON with Comments - JSON editing in Visual Studio Code [online]. Microsoft, [cit. 2024-04-29]. Dostupné online. (po anglicky)
  69. ↑ DEL SOLE, Alessandro. Visual Studio Code Distilled. 3. vyd. [s.l.] : Apress, 2023. ISBN 978-1-4842-9484-0. Kapitola Language Support and Code Editing Features, s. 46. (po anglicky)
  70. ↑ FRISBIE, Matt. Building Browser Extensions. Berkeley, California : Apress, 2025. ISBN 979-8-8688-1594-2. Kapitola The Extension Manifest. (po anglicky)
  71. ↑ BUTLER, H.. RFC 7946 - The GeoJSON Format. IETF Datatracker, 2016-08. Dostupné online. (po anglicky)
  72. ↑ GeoJSON [online]. geojson.org, [cit. 2022-08-07]. Dostupné online. (po anglicky)
  73. ↑ JSON-LD 1.1 [online]. World Wide Web Consortium, 2020-07-16, [cit. 2022-06-17]. Dostupné online. (po anglicky)
  74. ↑ JSON-LD - JSON for Linking Data [online]. json-ld.org, [cit. 2022-08-07]. Dostupné online. (po anglicky)
  75. ↑ JSON-RPC [online]. jsonrpc.org, [cit. 2022-06-17]. Dostupné online. (po anglicky)
  76. ↑ JsonML (JSON Markup Language) [online]. JsonML.org, [cit. 2022-06-17]. Dostupné online. (po anglicky)
  77. ↑ MCKAMEY, Stephen. JsonML [online]. GitHub, 2022-06-14, [cit. 2022-08-07]. Dostupné online. (po anglicky)
  78. ↑ FasterXML/smile-format-specification: New home for Smile format [online]. GitHub, [cit. 2022-06-17]. Dostupné online. (po anglicky)
  79. ↑ Universal Binary JSON Specification – The universally compatible format specification for Binary JSON [online]. ubjson.org, [cit. 2022-06-17]. Dostupné online. (po anglicky)
  80. ↑ UBJSON - JSON for Modern C++ [online]. json.nlohmann.me, [cit. 2022-08-07]. Dostupné online. (po anglicky)
  81. ↑ FEULING, Bryan. Repeatability, Reliability, and Scalability Through GitOps. [s.l.] : Packt Publishing, 2021. ISBN 9781801074315. S. 129. (po anglicky)
  82. ↑ HEGEDUS, William. Mastering Prometheus. [s.l.] : Packt Publishing, 2024. ISBN 9781805125327. S. 194–198. (po anglicky)
  83. ↑ LIANG, Eric; DAVIDSON, Aaron. Declarative Infrastructure with the Jsonnet Templating Language [online]. Databricks, [cit. 2026-10-05]. Dostupné online. (po anglicky)

Iné projekty

[upraviť | upraviť zdroj]
  • Spolupracuj na Commons Commons ponúka multimediálne súbory na tému JSON

Externé odkazy

[upraviť | upraviť zdroj]

Tento článok je čiastočný alebo úplný preklad článku JSON na anglickej Wikipédii.