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:

Syntaxe a datové typy

JSON podporuje následující základní datové typy:

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

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

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

Rozšíření a nástroje

Bezpečnostní rizika

Související pojmy

Externí odkazy

Viz také