JavaScript Object Notation

standardizovaný datový formát
(přesměrováno z JSON)

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.

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

Charakteristika editovat

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 editovat

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: editovat

{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 editovat

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 editovat

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 editovat

Související články editovat

Externí odkazy editovat