For faster navigation, this Iframe is preloading the Wikiwand page for JavaScript Object Notation.

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

[editovat | editovat zdroj]

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 | editovat zdroj]

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

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 | editovat zdroj]

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.

Související články

[editovat | editovat zdroj]

Externí odkazy

[editovat | editovat zdroj]
{{bottomLinkPreText}} {{bottomLinkText}}
JavaScript Object Notation
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?