Zkratka proJavaScript Object Notationdžej-sonZákladní

Definice

JSON je textový formát pro zápis strukturovaných dat, který používá objekty, pole, řetězce, čísla a literály true, false a null. Hodí se hlavně pro přenos dat mezi webovým klientem, serverem a službami, protože je čitelný pro člověka, snadno se parsuje a není vázaný na jeden programovací jazyk.

Kategorie: Webové technologieAktualizováno

Proč se JSON stal běžným jazykem webových API

Webová API potřebují předávat data tak, aby jim rozuměl prohlížeč, server, mobilní aplikace i nástroje na testování. JSON tuto roli zvládl, protože je textový, úsporný a odpovídá strukturám, které vývojáři znají z běžného kódu: objektům, polím, řetězcům a číslům. Při volání REST API typicky server pošle odpověď jako JSON a klient ji převede na objekt v JavaScriptu, Pythonu, Javě nebo jiném jazyce.

JSON není svázaný jen s JavaScriptem, i když z jeho zápisu historicky vychází. Formát používají také konfigurace, fronty zpráv, logy, analytické exporty a dokumentové databáze. V praxi se s JSON často potkáte u WebSocketu, integrací platebních bran, produktových feedů nebo u dokumentových modelů v oblasti NoSQL.

Z čeho se skládá platný JSON

Platný JSON má vždy jednu kořenovou hodnotu. Kořenem může být objekt, pole, řetězec, číslo, true, false nebo null, i když v API se nejčastěji používá objekt nebo pole. Objekt zapisuje dvojice klíč a hodnota, pole drží seřazený seznam hodnot. Klíče objektu jsou vždy řetězce a zapisují se v uvozovkách.

{
  "id": 42,
  "email": "eva@example.com",
  "roles": ["admin", "editor"],
  "active": true
}

JSON nepovoluje komentáře, koncové čárky ani jednoduché uvozovky kolem řetězců. Čísla nejsou rozdělená na integer a float na úrovni formátu, takže přesný význam řeší až parser a cílový jazyk. Hodnota null vyjadřuje prázdnou nebo neznámou hodnotu, nikoli chybějící klíč.

Kde JSON naráží na hranice

JSON neumí přímo zapsat datum, binární data, NaN, nekonečno, regulární výraz ani referenci na jinou část dokumentu. Datum se proto obvykle ukládá jako řetězec, například ve formátu ISO 8601, a binární obsah se často kóduje do Base64. Takové konvence musí být domluvené mezi systémy, jinak vznikají nenápadné chyby.

Velké JSON dokumenty mohou být paměťově náročné, protože mnoho knihoven nejdřív načte celý dokument a teprve potom s ním pracuje. Pro velmi rozsáhlé datové proudy se používá streamované zpracování, NDJSON nebo specializované binární formáty. JSON také sám neříká, které položky jsou povinné a jaké mají mít typy. Validaci obvykle doplňuje JSON Schema, aplikační kód nebo databázová pravidla podobná kontrolám známým z SQL.

JSON v konfiguraci, databázích a komunikaci služeb

Konfigurační soubory v JSON jsou snadno čitelné a dobře se generují nástroji, ale absence komentářů komplikuje ruční dokumentaci nastavení. Některé projekty proto volí JSON jen pro strojově spravované soubory a pro ruční konfiguraci dávají přednost formátům s komentáři.

Databáze často nabízejí sloupce nebo dokumenty založené na JSON, protože flexibilní struktura usnadňuje ukládání proměnlivých atributů. Flexibilita ale neznamená, že datový model není potřeba. Bez validace, indexů a jasné dohody o názvech polí se JSON může rychle změnit v obtížně udržovatelnou směs podobných, ale nekompatibilních struktur.

Příklady z praxe

  1. Odpověď objednávkového API

    E-shop po úspěšné platbě vrátí frontendu JSON s číslem objednávky, stavem a položkami košíku. Frontend z odpovědi vykreslí potvrzení nákupu a zákazník vidí stejná data, která backend uloží do objednávkového systému.

    {
      "orderId": "A-1024",
      "status": "paid",
      "total": 1290,
      "currency": "CZK",
      "items": [
        { "sku": "TSHIRT-BLK-M", "quantity": 2 }
      ]
    }
  2. Konfigurace funkcí aplikace

    Aplikace při startu načte JSON konfiguraci a podle ní zapne nový checkout jen v produkčním prostředí. Špatně zapsaná koncová čárka by soubor zneplatnila a nasazení by mohlo skončit chybou už při inicializaci.

    {
      "env": "production",
      "features": {
        "newCheckout": true,
        "debugToolbar": false
      },
      "timeoutMs": 5000
    }

Časté omyly

MýtusJSON je prostě objekt v JavaScriptu.
Ve skutečnostiJSON je textový zápis dat, zatímco objekt v JavaScriptu je hodnota v paměti programu. Podobnost syntaxe svádí k záměně, ale JSON má přísnější pravidla a musí se parsovat.
MýtusDo JSON můžu dát komentář, parser si ho nějak poradí.
Ve skutečnostiStandardní JSON komentáře nepovoluje. Některé nástroje přijímají rozšířený zápis, ale takový soubor nemusí projít v jiném prostředí nebo v běžném API klientovi.
MýtusJSON automaticky zaručí správné typy dat.
Ve skutečnostiJSON zaručuje jen základní syntaktické typy, například řetězec, číslo, objekt nebo pole. Povinná pole, přesné rozsahy a význam hodnot musí ověřit aplikace, databáze nebo validační schéma.

Časté dotazy

Kdy je JSON vhodný formát pro data?
JSON se vyplatí použít tam, kde si aplikace předávají běžná strukturovaná data: objekty, seznamy, texty, čísla a logické hodnoty. JSON je dobrou volbou pro webová API, konfigurační soubory generované nástroji nebo jednoduché datové exporty. JSON není ideální pro velké binární soubory, proudová data s extrémním objemem nebo situace, kde je nutná přesná typová informace přímo ve formátu.
Proč může JSON způsobit problém s velkými čísly?
JSON dovoluje zapsat číslo, ale neříká, jestli má jít o celé číslo, desetinné číslo s pevnou přesností nebo hodnotu s libovolnou přesností. Cílový jazyk nebo knihovna může velká čísla zaokrouhlit, pokud je ukládá do typu s omezenou přesností. JSON dokumenty s penězi, identifikátory nebo velmi velkými čísly proto často ukládají citlivé hodnoty jako řetězce nebo je validují samostatně.
Může JSON obsahovat komentáře?
JSON jako formát komentáře nepodporuje, takže zápis s // nebo /* */ není platný JSON. Konfigurační soubory, které komentáře dovolují, obvykle používají rozšíření formátu nebo jiný parser, například JSONC v některých vývojářských nástrojích. Přenosová API by se měla držet čistého JSON, protože klienti nemusí rozšířený zápis umět zpracovat.
K čemu se u JSON používá JSON Schema?
JSON Schema není součástí samotného JSON dokumentu, ale samostatný popis pravidel pro jeho validaci. JSON Schema může určit povinná pole, typy hodnot, povolené rozsahy, formát řetězců nebo strukturu vnořených objektů. JSON bez schématu říká pouze syntaxi dat, zatímco schéma pomáhá ověřit, jestli data odpovídají očekávanému kontraktu mezi systémy.

Zdroje

  1. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format(otevře se v novém okně)RFC Editor, 2017
  2. ECMA-404 - The JSON data interchange syntax(otevře se v novém okně)Ecma International, 2017
  3. JSON(otevře se v novém okně)MDN Web Docs

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.