json
Obsah
JSON
JSON (z anglického JavaScript Object Notation) je lehký, textový a člověkem čitelný formát pro výměnu a ukládání strukturovaných dat. Původně vznikl jako podmnožina jazyka JavaScript, dnes je však nezávislý na jakémkoli programovacím jazyce a podporován téměř všemi moderními technologiemi.
JSON se často používá pro:
- komunikaci mezi klientem a serverem (např. v REST API),
- konfigurační soubory,
- ukládání nestrukturovaných nebo polostrukturovaných dat (např. v NoSQL databázích jako MongoDB).
Syntaxe a datové typy
JSON podporuje následující základní datové typy:
- String – text uzavřený v dvojitých uvozovkách: `„Ahoj“`
- Number – celá nebo desetinná čísla (bez uvozovek): `42`, `-3.14`, `1.23e5`
- Boolean – logické hodnoty: `true`, `false`
- Null – prázdná hodnota: `null`
- Object – neuspořádaná množina dvojic klíč–hodnota (tzv. „mapa“ nebo „slovník“), uzavřená do složených závorek `{}`.
- Array – uspořádaný seznam hodnot, uzavřený do hranatých závorek `[]`.
❗ Důležité: V JSON musí být vždy použity dvojité uvozovky (`„`). Jednoduché uvozovky (`'`) nejsou platné.
Příklad JSON dokumentu
{
"jmeno": "Jan",
"prijmeni": "Novák",
"vek": 32,
"student": false,
"email": null,
"konicky": ["čtení", "běhání", "programování"],
"adresa": {
"ulice": "Náměstí Míru 123",
"mesto": "Praha",
"psc": "110 00",
"zeme": "Česká republika"
}
}
Pravidla syntaxe JSON
- Klíče (názvy vlastností) musí být řetězce v dvojitých uvozovkách.
- Hodnoty mohou být libovolného platného JSON typu.
- Čárky oddělují jednotlivé prvky (v poli) nebo dvojice klíč–hodnota (v objektu).
- Na konci posledního prvku v objektu nebo poli nesmí být čárka (tzv. „trailing comma“ – není v základním JSON povolena, i když některé knihovny ji tolerují).
- Komentáře nejsou v oficiálním JSON standardu podporovány.
Nesprávný JSON (běžné chyby):
{
'jmeno': 'Jan', // ❌ Jednoduché uvozovky
vek: 32, // ❌ Klíč bez uvozovek
konicky: ["a", "b",], // ❌ Čárka na konci pole
// komentář // ❌ Komentáře nejsou povoleny
}
Výhody a nevýhody
| Výhody | Nevýhody |
|---|---|
| Čitelnost – snadno čitelný jak pro lidi, tak pro stroje. | Žádné komentáře – nelze přidávat poznámky do konfiguračních souborů. |
| Lehký a kompaktní – menší objem než XML. | Duplikace klíčů – v objektu mohou být teoreticky duplicitní klíče (standard říká, že by měly být ignorovány – nebezpečné pro bezpečnost). |
| Široká podpora – všechny moderní jazyky mají vestavěnou podporu (např. `JSON.parse()` v JavaScriptu, `json` modul v Pythonu). | Žádná kontrola schématu v základu – bez validace může být struktura nekonzistentní (řeší se pomocí JSON Schema). |
| Hierarchická struktura – ideální pro vnořená data. | Bez typové bezpečnosti – např. číslo a řetězec se liší jen uvozovkami, což může vést k chybám. |
Použití v praxi
- Webová API: Většina REST API vrací data ve formátu JSON (např. `Content-Type: application/json`).
- Konfigurační soubory: Např. `package.json` v Node.js, `tsconfig.json` v TypeScriptu.
- NoSQL databáze: MongoDB, CouchDB a Firebase ukládají data jako JSON dokumenty.
- Ukládání dat v aplikacích: Mnoho desktopových i mobilních aplikací používá JSON pro lokální ukládání nastavení nebo dat.
Příklad v JavaScriptu:
const data = JSON.parse('{"jmeno":"Jan","vek":32}'); console.log(data.jmeno); // "Jan" const jsonStr = JSON.stringify(data); // Vrátí: '{"jmeno":"Jan","vek":32}'
Příklad v Pythonu:
import json data = {"jmeno": "Jan", "vek": 32} json_str = json.dumps(data, ensure_ascii=False) # Výstup: {"jmeno": "Jan", "vek": 32} obj = json.loads('{"jmeno": "Eva"}') print(obj["jmeno"]) # "Eva"
Standardy a specifikace
- RFC 8259 – oficiální specifikace JSON (nahrazuje původní RFC 7159).
- MIME typ: `application/json`
- Přípona souboru: `.json`
- Kódování: JSON musí být v kódování UTF-8, UTF-16 nebo UTF-32, přičemž UTF-8 je doporučeno.
Rozšíření a nástroje
- JSON5 – rozšíření JSON s podporou komentářů, jednoduchých uvozovek, trailing čárek atd. (není kompatibilní s čistým JSON).
- JSON Schema – jazyk pro popis a validaci struktury JSON dat.
- jq – příkazový nástroj pro filtrování a transformaci JSON v terminálu.
- YAML – alternativní formát, který je člověkem ještě lépe čitelný, ale složitější.
Bezpečnostní rizika
- JSON injection – pokud se data z JSON nevalidují, mohou být použita k útokům (např. XSS).
- Prototype pollution – v JavaScriptu může škodlivý JSON manipulovat s vlastnostmi objektů (zejména při použití `JSON.parse()` s nebezpečnými knihovnami).
- Únik dat – konfigurační soubory `.json` často obsahují citlivé údaje (API klíče, hesla) – nikdy je neukládej do veřejných repozitářů!
Související pojmy
Externí odkazy
- Oficiální web: https://www.json.org/json-cs.html
- JSON Schema: https://json-schema.org
- JSON Validator: https://jsonlint.com
Viz také
json.txt · Poslední úprava: autor: admin
