JSON vs YAML: rozdíly a případy použití

JSON a YAML jsou dva nejpoužívanější textové serializační formáty pro popis strukturovaných dat: aplikační konfigurace, API payload, infrastrukturní soubory, Kubernetes manifests, CI/CD pipelines. Oba reprezentují stejné základní struktury (objekty, seznamy, skaláry), ale s odlišnými filosofiemi: JSON preferuje strojovou čitelnost a univerzalitu, YAML sází na lidskou čitelnost a stručnost. Tento článek srovnává oba formáty bod po bodu, aby vám pomohl s výběrem.

Co je JSON?

JSON (JavaScript Object Notation) je serializační formát uvedený Douglasem Crockfordem na začátku 2000 let, odvozený z JavaScript literální syntaxe objektu. Standardizovaný RFC 8259 a ECMA-404, je dnes pivot formát webu: téměř všechna REST API, NoSQL databáze a frontend konfigurace ho používají.

JSON spočívá na dvou strukturách:

  • Uspořádaná kolekce dvojic klíč-hodnota (objekt, mezi složenými závorkami)
  • Uspořádaný seznam hodnot (pole, mezi hranatými závorkami)

Skalární hodnoty jsou string, number, true, false nebo null. Řetězce jsou povinně obklopeny dvojitými uvozovkami. JSON nepodporuje komentáře.

Co je YAML?

YAML (YAML Ain't Markup Language) je formát objevený v 2001, navržený od počátku být čitelný člověkem. Současná specifikace je YAML 1.2.2. Jeho rozlišovací charakteristika: používá odsazení pro vyjádření hierarchie, jako Python.

YAML je nadmnožinou JSON od verze 1.2: jakýkoli validní JSON dokument je validní YAML dokument. Ale YAML přidává mnoho: komentáře, řetězce bez uvozovek, víceřádkové, anchors a aliasy, tags pro explicitní typování, vícenásobné dokumenty v jediném souboru (---).

Srovnaná syntaxe

Zde je stejná struktura vyjádřená v obou formátech.

JSON

{
  "name": "cdrn",
  "version": "1.14",
  "tags": ["seo", "tools", "open-source"],
  "author": {
    "name": "Adrien",
    "email": "contact@example.com"
  },
  "active": true,
  "stars": null
}

YAML

# Konfigurace projektu
name: cdrn
version: "1.14"
tags:
  - seo
  - tools
  - open-source
author:
  name: Adrien
  email: contact@example.com
active: true
stars: null

Na stejném obsahu YAML zabírá přibližně stejný počet řádků, ale vyhýbá se složeným závorkám, hranatým závorkám, koncovým čárkám a uvozovkám na většině řetězců. Komentáře (řádky #) jsou povolené.

Podporované typy

JSON zná 6 typů: object, array, string, number, boolean, null. Žádné nativní datum, žádný binární, žádný explicitní rozdíl integer/float.

YAML 1.2 zná stejné jako JSON a přidává: ISO 8601 timestampy, binární (kódované base64 přes tag !!binary), odlišné integery a floaty, nekonečno, NaN a vlastní typy přes tagy (!!str, !!int, !!float...). YAML 1.1 akceptoval yes/no/on/off jako booleany: klasická past na starých parserech.

Výkon a ekosystém

JSON je typicky 3 až 10krát rychlejší na parsování než YAML a jeho parsery jsou dostupné všude (integrované v runtime téměř všech jazyků). YAML knihovny jsou těžší, protože spravují bohatší gramatiku (anchors, tags, multi-doc).

Na straně ekosystému: JSON dominuje HTTP API, NoSQL databáze (MongoDB, CouchDB), soubory package.json, composer.json, tsconfig.json. YAML se prosadil pro aplikační konfiguraci a infrastructure-as-code: Symfony, Spring Boot, Rails, Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.

Srovnávací tabulka

Kritérium JSON YAML
Lidská čitelnostDobráVynikající
Strojová čitelnostVynikajícíKorektní
KomentářeNeAno (#)
Významné odsazeníNeAno
Rychlost parsováníRychláPomalejší
Bohaté typy (datum, binární)NeAno
Anchors / aliasyNeAno
Typický případ použitíAPI, úložiště, výměna datKonfigurace, infra-as-code

Typické případy použití

Zvolit JSON, když

  • Navrhujete REST API nebo webhook endpoint
  • Ukládáte data v NoSQL databázi nebo cache
  • Vyměňujete data mezi frontendem a backendem
  • Parsovací výkon je kritický (vysoká propustnost, edge)
  • Chcete univerzálně podporovaný formát bez závislosti

Zvolit YAML, když

  • Píšete aplikační konfiguraci editovanou ručně
  • Potřebujete komentáře pro dokumentaci voleb
  • Píšete Kubernetes, Docker Compose, GitHub Actions, Ansible
  • Chcete faktorovat bloky s anchors a aliasy
  • Čitelnost převažuje nad rychlostí zpracování

Doporučení

Jednoduché pravidlo: JSON pro stroj, YAML pro člověka. Pokud je váš soubor produkován nebo konzumován programem, vezměte JSON. Pokud je psán a čten ručně, vezměte YAML. Mnoho ekosystémů akceptuje oba: Symfony čte YAML, JSON a XML pro své konfigurace, Kubernetes akceptuje oba pro své manifests. V pochybnostech začněte s YAML pro lidskou konfiguraci a JSON pro automatizované toky.

Můžete testovat konverzi z jednoho formátu do druhého naším JSON / YAML konvertorem a rychle naformátovat dokument JSON formátorem.

Často kladené otázky

Je YAML pomalejší než JSON?

Ano, zpravidla parsování YAML dokumentu stojí několikrát více CPU než parsování stejného JSON dokumentu, protože YAML gramatika je bohatší (odsazení, tags, anchors). V praxi je rozdíl zanedbatelný pro konfigurační soubory. Stává se citelným, když parsujete desítky tisíc dokumentů ve smyčce.

Lze automaticky konvertovat YAML na JSON?

Ano: jakýkoli YAML dokument lze konvertovat na JSON bez ztráty, pokud se vyhneme YAML specifickým typům (timestampy, anchors). Opak je ještě jednodušší, JSON je podmnožinou YAML 1.2. Náš konvertor dělá oba směry.

Akceptuje JSON komentáře?

Ne, standard JSON je zakazuje. Existují dialekty (JSON5, JSONC), ale nejsou univerzálně podporované. Pokud potřebujete komentáře, vezměte YAML nebo TOML.

Proč Kubernetes používá YAML a ne JSON?

Kubernetes manifesty jsou psány a čteny lidmi. YAML nabízí komentáře, méně hlučnou syntaxi a možnost faktorovat přes anchors. Kubernetes API akceptuje také JSON, ale idiomatické použití zůstává YAML.

Je YAML skutečně nadmnožinou JSON?

Ano od YAML 1.2: jakýkoli validní JSON dokument je validní YAML dokument. To umožňuje vložit JSON do YAML souboru bez modifikace, což je praktické pro generované nebo zkopírované bloky.