JavaScript Object Notation

JSON
Ikona
Přípona souboru.json
Typ internetového médiaapplication/json
Type codeTEXT
Uniform Type Identifierpublic.json
Websitejson.org

JavaScript Object Notation (JavaScriptový objektový zápis, JSON) je způsob zápisu dat (datový formát) nezávislý na počítačové platformě, určený pro přenos dat, která mohou být organizována v polích nebo agregována v objektech. Vstupem je libovolná datová struktura (číslo, řetězec, boolean, objekt nebo z nich složené pole), výstupem je vždy řetězec. Složitost hierarchie vstupní proměnné není teoreticky nijak omezena.

Charakteristika

JSON umí pojmout pole hodnot (neindexované i indexované, tzv. hash), objekty (coby pole dvojic index:hodnota) a jednotlivé hodnoty, kterými mohou být řetězce, čísla (celá i s pohyblivou řádovou čárkou) a speciální hodnoty true, falsenull. Indexy polí v objektu mají notaci jako řetězce; řetězce jsou uváděny v uvozovkách a escapovány pomocí zpětného lomítka. Mezi prvky a hodnotami mohou být libovolné bílé znaky, které na výsledku nic nemění. JSON jako formát neřeší kódování textu, výchozí kódování je ale UTF-8.

Příklady

Otestování schopností JSON (v PHP):

$a=array(1, -2, 3.333, 4e17, "abc", \n", null, array(2.1, 2.2, array("2.2.1")), false, true, "", "key"=>"value", 'abc"def'=>array());
echo json_encode($a, JSON_PRETTY_PRINT);

Kód vypíše:

{
    "0": 1,
    "1": -2,
    "2": 3.333,
    "3": 4.0e+17,
    "4": "abc",
    "5": "\u00e1\n",
    "6": null,
    "7": [
        2.1,
        2.2,
        [
            "2.2.1"
        ]
    ],
    "8": false,
    "9": true,
    "10": "",
    "key": "value",
    "abc\"def": []
}

Příklady chybně zformátovaných dat:

{klíč: "hodnota"}
klíče musejí být v uvozovkách
{'klíč':'hodnota'}
řetězce musejí být pouze ve dvojitých uvozovkách
{"size": .1}
čísla musejí začínat číslicí
{"moje \"velké\" džíny":"Levi\'s"}
zatímco dvojité uvozovky se uvnitř řetězce eskapují, jednoduché (apostrofy) nikoliv
[
  1,
  2,
  3,
]
poslední čárka není dovolena
{
  "text": "Line 1
Line 2
Line 3"
}
vkládání textové hodnoty s konci řádků se musí uvést v jednom řádku a samotné odřádkování escapovat, tj. použít \n a/nebo \r
{"name": "\u96"}
znaky zakódované do Unicode jsou vždy čtyřmístné, zleva doplněné nulami
{"allow": TRUE}
konstanty true, false a null se uvádějí pouze malými písmeny
{
  Number.POSITIVE_INFINITY,
  Number.NEGATIVE_INFINITY,
  NaN,
}
speciální hodnoty pro nekonečno a NaN nejsou povoleny

Výhody a nevýhody

Navzdory názvu je JSON zcela obecný a může sloužit pro přenos dat v libovolném programovacím nebo skriptovacím jazyku, přitom jsou data poměrně čitelná i pro člověka. Data, zapsaná metodou JSON, mohou být samozřejmě uložena a přenášena v souborech; častěji ale přenos probíhá v prostředí intra- nebo internetu (např. s použitím technologie AJAX).

Mezi nedostatky JSON patří to, že neumožňuje definovat znakovou sadu přenášeného obsahu, optimalizace pro přenos binárních dat. Tyto nedostatky platí ale pro některé (slabší) implementace. Nealfabetické znaky v řetězcích a binární data JSON jsou escapovány zpětným lomítkem, za kterým následuje buď jeden z běžně používaných znaků (např. \n pro nový řádek, \t pro tabulátor, \\ pro samotné zpětné lomítko) nebo \u indikující znak z Unicode (UTF-16), za nímž následují čtyři hexadecimální číslice.

Dá se říci, že JSON sází na jednoduchost způsobu uložení dat, srozumitelnost (data jsou čitelná člověkem), platformovou nezávislost a jednotnost (JSON se rychle etabloval) a to vše na úkor velikosti přenášených dat.

Alternativy

Vizuálně velmi podobný JSONu je SDL, který své složené datové typy a pole taktéž vkládá (i vícenásobně) do složených závorek. Jiný přístup má YAML, který na rozdíl od JSONu aktivně používá odsazování a může obsahovat i komentáře.

Další alternativou JSONu je XML, které lépe pojme i kontext toho, co přenáší – na rozdíl od JSON ale obsahuje průměrně 40 % samotné značky a jejich atributy. JSON je tedy považováno za „odlehčenou“ a jednodušší alternativu k XML. Navíc většinou existují importní/exportní metody, jak mezi XML a JSON data převádět. Oblast, ve které je JSON neoptimální, jsou binární data.

Některé programovací a skriptovací jazyky mají tzv. serializaci, implementovanou jako základní funkci. Její princip je s JSON velmi podobný, ale jsou specifické pro daný jazyk. Nemají-li nativně JSON ani serializaci, je poslední alternativou napsání vlastního řešení. Výhodou toho je absolutní kontrola nad tím, jaká data se přenesou a jak (textová či binární podoba, datová komprese), nevýhoda je v tom, že tento způsob není obecně známý a ti, kteří s ním budou pracovat, si jej budou muset nastudovat.

Odkazy

Související články

Externí odkazy

Média použitá na této stránce

JSON vector logo.svg
The graphical logo for JSON, an open standard by Douglas Crockford.