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á čitelnost | Dobrá | Vynikající |
| Strojová čitelnost | Vynikající | Korektní |
| Komentáře | Ne | Ano (#) |
| Významné odsazení | Ne | Ano |
| Rychlost parsování | Rychlá | Pomalejší |
| Bohaté typy (datum, binární) | Ne | Ano |
| Anchors / aliasy | Ne | Ano |
| Typický případ použití | API, úložiště, výměna dat | Konfigurace, 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.