JSON vs JSON5 vs JSONC vs YAML

JSON5 a JSONC rozšiřují zápis JSON o pohodlí pro člověka, YAML používá jinou syntaxi. Běžný JSON parser komentáře ani tato rozšíření nečte.

Autor: Aktualizováno

Rozdíly formátů

FormátKomentářeKoncové čárkyJednoduché uvozovkyDefinice
JSONneneneRFC 8259 / ECMA-404
JSONCanopodle implementacenekonvence nástroje; ověř jeho parser
JSON5anoanoanospecifikace JSON5 1.0.0
YAML 1.2anojiná gramatikaano i prosté skaláryspecifikace YAML

Pro veřejné API používej formát, který API výslovně přijímá. application/json očekává standardní JSON. Konfigurace editoru může používat volnější pravidla, aniž by je tím získalo celé API.

JSONC: JSON s komentáři

config.jsonc
{
  // Nastavení s komentářem
  "jmeno": "Jana",
  "pocet": 16
}

JSONC obvykle přidává řádkové a blokové komentáře. Není to jeden standard RFC. VS Code dovoluje také koncové čárky, ale upozorňuje na ně; jiné parsery je odmítají nebo vyžadují přepínač. Řetězce a názvy ponech ve dvojitých uvozovkách.

Přípona .json sama není zárukou formátu: například konfigurace VS Code se komentáři řídí pravidly programu, který soubor čte. Podrobnosti uvádí dokumentace editoru.

JSON5: další rozšíření pro ruční editaci

config.json5
// Nastavení pro parser JSON5
{
  jmeno: 'Jana',
  pocet: 0x10,
}

JSON5 přidává mimo jiné neuzavřené názvy odpovídající identifikátorům, jednoduché uvozovky, koncové čárky, šestnáctková čísla a NaN či Infinity. Nepřidává funkce ani libovolné výrazy JavaScriptu. Použij parser JSON5, nikoli eval().

Po převodu do JSON zkontroluj přesnost čísel a nečíselné hodnoty: standardní JSON nemá reprezentaci NaN a Infinity. To může vyžadovat změnu dat, nikoli jen přepsání syntaxe.

YAML: odsazení, skaláry a kotvy

config.yaml
jmeno: Jana
pocet: 16
aktivni: true
polozky:
  - Hrnek
  - Podtácek

YAML zapisuje mapy a sekvence i pomocí odsazení. Umí kotvy a aliasy a jeho tagy mohou rozlišovat další typy. YAML 1.2 byl navržen s kompatibilitou s JSON; konkrétní knihovna ale může používat pravidla YAML 1.1 nebo jiné schéma typování.

Pokud má hodnota zůstat řetězcem, dej ji do uvozovek. U nedůvěryhodného vstupu použij bezpečný parser, omez velikost a expanzi aliasů a nepovoluj vytváření aplikačních objektů z tagů. Konverze může zahodit komentáře, styl, kotvy i typy, které JSON nezná.

Doporučený postup

  1. Zjisti formát a pravidla příjemce.
  2. Načti vstup parserem správného formátu.
  3. Ověř, že hodnoty mají požadované typy.
  4. Výstup vytvoř serializátorem JSON a ověř JSON Schema.

Nahrazení komentářů regulárním výrazem poškodí například URL uvnitř řetězce. Parser musí rozlišovat komentář od obsahu hodnoty.