Co je JSON

JSON (JavaScript Object Notation) je textový formát pro výměnu strukturovaných dat. Kapitola vysvětluje, z čeho se skládá, k čemu se používá, jak vznikl a které standardy ho dnes definují.

Autor: Aktualizováno

JSON jednou větou

JSON je jednoduchý textový zápis dat složený z objektů, polí a několika typů hodnot. Vznikl podle zápisu objektů v JavaScriptu, dnes ho ale čtou a zapisují knihovny ve všech běžných jazycích a jeho použití není omezené na JavaScript.

objednavka.json
{
  "cislo": "2026-117",
  "zaplaceno": true,
  "sleva": null,
  "zakaznik": {
    "jmeno": "Jana Nováková",
    "email": "jana@example.cz"
  },
  "polozky": [
    { "nazev": "Hrnek", "mnozstvi": 2, "cena": 199.5 },
    { "nazev": "Podtácek", "mnozstvi": 1, "cena": 49 }
  ]
}

Ukázka je jeden objekt ve složených závorkách. Obsahuje dvojice název: hodnota; hodnotou může být řetězec ("2026-117"), logická hodnota (true), null, další objekt (zakaznik) nebo pole v hranatých závorkách (polozky).

Z čeho se JSON skládá

JSON zná čtyři jednoduché typy a dva složené. Nic dalšího: žádný samostatný typ pro datum, žádné komentáře, žádné odkazy mezi hodnotami. Datum se proto obvykle přenáší jako řetězec ve formátu ISO 8601 ("2026-09-30T14:30:00+02:00").

TypPříkladPoznámka
řetězec (string)"Jana Nováková"vždy ve dvojitých uvozovkách
číslo (number)199.5desítkový zápis, žádné NaN ani Infinity
logická hodnota (boolean)true, falsejen malými písmeny
nullnullprázdná hodnota
objekt (object){ "jmeno": "Jana" }neuspořádané dvojice název a hodnota
pole (array)[1, 2, 3]uspořádaná posloupnost hodnot

Pravidla zápisu každého typu podrobně popisuje kapitola Syntaxe JSON, řetězcům a číslům se věnují samostatné kapitoly Řetězce a Čísla.

K čemu se JSON používá

  • Webová API. JSON se často používá pro těla požadavků a odpovědí s MIME typem application/json.
  • Konfigurace. Například package.json v Node.js nebo composer.json v PHP. Pozor: soubory jako tsconfig.json nebo nastavení VS Code povolují komentáře, takže jsou ve skutečnosti v nestandardním dialektu JSONC a běžný parser je odmítne.
  • Ukládání dat. Dokumentové databáze (MongoDB, CouchDB) i relační databáze se sloupci typu JSON.
  • Výměna dat mezi systémy. Exporty, fronty zpráv a logy, kde každý řádek obsahuje jeden JSON objekt.

Historie a standardy

JSON popsal Douglas Crockford na webu json.org jako podmnožinu zápisu objektů v JavaScriptu. Formální specifikace vznikly později, a to rovnou dvě: u IETF jako RFC a u organizace Ecma jako ECMA-404.

DokumentVydánCo přinesl
RFC 4627červenec 2006první popis od Douglase Crockforda, registrace MIME typu application/json; informativní RFC
ECMA-404, 1. vydáníříjen 2013gramatika JSON jako standard Ecma
RFC 7159březen 2014standardizační řada IETF; JSON text smí být libovolná hodnota, nejen objekt nebo pole
RFC 7493 (I-JSON)březen 2015profil pro výměnu dat: vyžaduje UTF-8 a jedinečné klíče; doporučuje rozsah a přesnost čísel binary64
ECMA-404, 2. vydáníprosinec 2017shodné s ISO/IEC 21778:2017
RFC 8259prosinec 2017platná verze, internetový standard STD 90; při výměně mezi systémy povinné UTF-8

Platí RFC 8259 a ECMA-404, 2. vydání. Obě definují stejnou gramatiku a organizace se zavázaly udržovat je v souladu. RFC 8259 k ní navíc doporučuje postupy pro spolehlivou výměnu dat: jedinečné názvy v objektech, kódování UTF-8 a čísla v rozsahu, který zvládne většina implementací. ECMA-404 popisuje jen syntaxi. Vývoj obou formátů v čase shrnuje historie XML a JSON.

JSON text není objekt JavaScriptu

Slovo „JSON“ se v praxi používá pro tři různé věci a je dobré je rozlišovat:

  • JSON text: řetězec znaků, který odpovídá gramatice JSON,
  • zápis objektu v JavaScriptu (object literal): kód, který jen vypadá podobně a má volnější pravidla,
  • objekt v paměti, který vznikne zpracováním JSON textu parserem.
JavaScript
// JSON text: řetězec, který teprve čeká na zpracování
const text = '{"cislo": "2026-117", "zaplaceno": true}';

// objekt JavaScriptu, který z textu vytvoří parser
const objednavka = JSON.parse(text);
objednavka.zaplaceno;            // true

// a zpět na JSON text
JSON.stringify(objednavka);      // '{"cislo":"2026-117","zaplaceno":true}'

JSON text se nikdy nezpracovává přes eval(). Spustil by i kód, který v textu podstrčil útočník. Vždy použij parser, v JavaScriptu JSON.parse().

MIME typ a přípona

Registrovaný MIME typ je application/json, přípona souboru .json. Parametr charset pro tento typ definovaný není a podle RFC 8259 nemá na správně napsaného příjemce žádný vliv. RFC 8259 vyžaduje UTF-8 při výměně mezi systémy, které nejsou součástí uzavřeného prostředí.

JSON, nebo XML?

JSON bývá pro jednoduché záznamy stručný a dobře se převádí na běžné datové struktury. Velikost konkrétního souboru ale závisí na jeho obsahu a zápisu. XML umí smíšený obsah (text se značkami uvnitř), jmenné prostory, atributy a vyzrálé schéma XSD. Podrobné srovnání i úskalí převodu mezi nimi najdeš v kapitole XML vs JSON.

Všechny kapitoly sekce

Vyber si téma podle toho, co potřebuješ vyřešit. Seznam obsahuje i kapitoly, které se nevejdou do hlavního menu.

  • Syntaxe JSON Pravidla zápisu JSON podle RFC 8259: JSON text, objekty a pole, šest typů hodnot, bílé znaky, duplicitní klíče, kódování UTF-8 a nejčastější chyby.
  • Řetězce a escapování Jak se v JSON zapisují řetězce: co se musí escapovat, sekvence pro konec řádku a tabulátor, zápis \uXXXX, emoji jako náhradní pár UTF-16 a porovnávání řetězců.
  • Čísla v JSON Jak se v JSON zapisují čísla, proč neexistuje NaN a Infinity, co znamená přesnost IEEE 754 a hranice 2^53 a jak přenášet velká ID a peněžní částky.
  • JSON vs JavaScript Rozdíl mezi JSON textem, object literal a objektem po JSON.parse(). Pravidla syntaxe a ztráty při JSON.stringify().
  • JSON, JSON5, JSONC a YAML Komentáře, uvozovky, koncové čárky a převod mezi formáty JSON, JSON5, JSONC a YAML. Kompatibilita parserů a časté chyby.
  • JSON-LD JSON-LD připojuje ke klíčům a hodnotám JSON význam pomocí IRI a kontextu. Běžný JSON parser načte syntax; interpretaci propojených dat provádí JSON-LD procesor.
  • GeoJSON GeoJSON je JSON formát geografických geometrií a prvků. RFC 7946 používá zeměpisné souřadnice WGS 84 v pořadí délka, šířka.
  • JSON Lines a NDJSON JSON Lines ukládá jednu platnou JSON hodnotu na každý řádek v UTF-8. Hodí se pro streamové exporty a logy; celý soubor obvykle není jediný JSON text.
  • OpenAPI OpenAPI popisuje rozhraní HTTP API: cesty, operace, parametry, těla a odpovědi. Dokument může být JSON nebo YAML; schémata hodnot jsou jen jednou jeho částí.
  • JWT: JSON Web Token JWT přenáší tvrzení v obálce JWS nebo JWE. Rozkódování Base64url pouze zpřístupní obsah; teprve ověření a kontrola pravidel aplikace rozhodne, zda mu věřit.
  • CBOR, MessagePack a BSON Binární formáty ukládají strukturovaná data v bajtech a mohou podporovat typy navíc. Nejsou pouze JSON text v jiném kódování a nejsou vždy menší než komprimovaný JSON.
  • package.json a JSON konfigurace JSON konfigurace má syntaxi JSON a vlastní pravidla aplikace. Package.json je manifest npm; nastavení VS Code používá JSONC a jiná pravidla parseru.