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.
{
"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").
| Typ | Příklad | Poznámka |
|---|---|---|
| řetězec (string) | "Jana Nováková" | vždy ve dvojitých uvozovkách |
| číslo (number) | 199.5 | desítkový zápis, žádné NaN ani Infinity |
| logická hodnota (boolean) | true, false | jen malými písmeny |
| null | null | prá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.jsonv Node.js nebocomposer.jsonv PHP. Pozor: soubory jakotsconfig.jsonnebo 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.
| Dokument | Vydán | Co přinesl |
|---|---|---|
| RFC 4627 | červenec 2006 | první popis od Douglase Crockforda, registrace MIME typu application/json; informativní RFC |
| ECMA-404, 1. vydání | říjen 2013 | gramatika JSON jako standard Ecma |
| RFC 7159 | březen 2014 | standardizační řada IETF; JSON text smí být libovolná hodnota, nejen objekt nebo pole |
| RFC 7493 (I-JSON) | březen 2015 | profil 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 2017 | shodné s ISO/IEC 21778:2017 |
| RFC 8259 | prosinec 2017 | platná 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.
// 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.