JSON vs YAML: rozdiely a prípady použitia

JSON a YAML sú dva najpoužívanejšie textové serializačné formáty na popis štruktúrovaných dát: aplikačná konfigurácia, API payload, infraštrukturálne súbory, Kubernetes manifests, CI/CD pipelines. Oba reprezentujú rovnaké základné štruktúry (objekty, zoznamy, skaláre), ale s odlišnými filozofiami: JSON preferuje strojovú čitateľnosť a univerzalitu, YAML sa stavia na ľudskej čitateľnosti a stručnosti. Tento článok porovnáva oba formáty bod po bode, aby vám pomohol s výberom.

Čo je JSON?

JSON (JavaScript Object Notation) je serializačný formát uvedený Douglasom Crockfordom na začiatku 2000 rokov, odvodený z JavaScript literálnej syntaxe objektu. Štandardizovaný RFC 8259 a ECMA-404, je dnes pivot formát webu: takmer všetky REST API, NoSQL databázy a frontend konfigurácie ho používajú.

JSON spočíva na dvoch štruktúrach:

  • Usporiadaná kolekcia dvojíc kľúč-hodnota (objekt, medzi zloženými zátvorkami)
  • Usporiadaný zoznam hodnôt (pole, medzi hranatými zátvorkami)

Skalárne hodnoty sú string, number, true, false alebo null. Reťazce sú povinne obklopené dvojitými úvodzovkami. JSON nepodporuje komentáre.

Čo je YAML?

YAML (YAML Ain't Markup Language) je formát objavený v 2001, navrhnutý od počiatku byť čitateľný človekom. Súčasná špecifikácia je YAML 1.2.2. Jeho rozlišovacia charakteristika: používa odsadenie na vyjadrenie hierarchie, ako Python.

YAML je nadmnožinou JSON od verzie 1.2: akýkoľvek validný JSON dokument je validný YAML dokument. Ale YAML pridáva veľa: komentáre, reťazce bez úvodzoviek, viacriadkové, anchors a aliasy, tags na explicitné typovanie, viacnásobné dokumenty v jedinom súbore (---).

Porovnaná syntax

Tu je rovnaká štruktúra vyjadrená v oboch formátoch.

JSON

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

YAML

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

Na rovnakom obsahu YAML zaberá približne rovnaký počet riadkov, ale vyhýba sa zloženým zátvorkám, hranatým zátvorkám, koncovým čiarkam a úvodzovkám na väčšine reťazcov. Komentáre (riadky #) sú povolené.

Podporované typy

JSON pozná 6 typov: object, array, string, number, boolean, null. Žiadny natívny dátum, žiadny binárny, žiadny explicitný rozdiel integer/float.

YAML 1.2 pozná rovnaké ako JSON a pridáva: ISO 8601 timestampy, binárne (kódované base64 cez tag !!binary), odlišné integery a floaty, nekonečno, NaN a vlastné typy cez tagy (!!str, !!int, !!float...). YAML 1.1 akceptoval yes/no/on/off ako booleany: klasická pasť na starých parseroch.

Výkon a ekosystém

JSON je typicky 3 až 10krát rýchlejší na parsovanie ako YAML a jeho parsery sú dostupné všade (integrované v runtime takmer všetkých jazykov). YAML knižnice sú ťažšie, pretože spravujú bohatšiu gramatiku (anchors, tags, multi-doc).

Na strane ekosystému: JSON dominuje HTTP API, NoSQL databázy (MongoDB, CouchDB), súbory package.json, composer.json, tsconfig.json. YAML sa presadil pre aplikačnú konfiguráciu a infrastructure-as-code: Symfony, Spring Boot, Rails, Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.

Porovnávacia tabuľka

Kritérium JSON YAML
Ľudská čitateľnosťDobráVynikajúca
Strojová čitateľnosťVynikajúcaKorektná
KomentáreNieÁno (#)
Významné odsadenieNieÁno
Rýchlosť parsovaniaRýchlaPomalšia
Bohaté typy (dátum, binárny)NieÁno
Anchors / aliasyNieÁno
Typický prípad použitiaAPI, úložisko, výmena dátKonfigurácia, infra-as-code

Typické prípady použitia

Zvoliť JSON, keď

  • Navrhujete REST API alebo webhook endpoint
  • Ukladáte dáta v NoSQL databáze alebo cache
  • Vymieňate dáta medzi frontendom a backendom
  • Parsovací výkon je kritický (vysoká priepustnosť, edge)
  • Chcete univerzálne podporovaný formát bez závislosti

Zvoliť YAML, keď

  • Píšete aplikačnú konfiguráciu editovanú ručne
  • Potrebujete komentáre na dokumentáciu volieb
  • Píšete Kubernetes, Docker Compose, GitHub Actions, Ansible
  • Chcete faktorovať bloky s anchors a aliasmi
  • Čitateľnosť prevažuje nad rýchlosťou spracovania

Odporúčanie

Jednoduché pravidlo: JSON pre stroj, YAML pre človeka. Ak je váš súbor produkovaný alebo konzumovaný programom, vezmite JSON. Ak je písaný a čítaný ručne, vezmite YAML. Mnoho ekosystémov akceptuje oba: Symfony číta YAML, JSON a XML pre svoje konfigurácie, Kubernetes akceptuje oba pre svoje manifests. V pochybnostiach začnite s YAML pre ľudskú konfiguráciu a JSON pre automatizované toky.

Konverziu z jedného formátu do druhého môžete testovať naším JSON / YAML konvertorom a rýchlo naformátovať dokument JSON formátorom.

Často kladené otázky

Je YAML pomalší ako JSON?

Áno, spravidla parsovanie YAML dokumentu stojí niekoľkokrát viac CPU ako parsovanie rovnakého JSON dokumentu, pretože YAML gramatika je bohatšia (odsadenie, tags, anchors). V praxi je rozdiel zanedbateľný pre konfiguračné súbory. Stáva sa citeľným, keď parsujete desiatky tisíc dokumentov v slučke.

Možno automaticky konvertovať YAML na JSON?

Áno: akýkoľvek YAML dokument možno konvertovať na JSON bez straty, ak sa vyhneme YAML špecifickým typom (timestampy, anchors). Opak je ešte jednoduchší, JSON je podmnožinou YAML 1.2. Náš konvertor robí oba smery.

Akceptuje JSON komentáre?

Nie, štandard JSON ich zakazuje. Existujú dialekty (JSON5, JSONC), ale nie sú univerzálne podporované. Ak potrebujete komentáre, vezmite YAML alebo TOML.

Prečo Kubernetes používa YAML a nie JSON?

Kubernetes manifesty sú písané a čítané ľuďmi. YAML ponúka komentáre, menej hlučnú syntax a možnosť faktorovať cez anchors. Kubernetes API akceptuje tiež JSON, ale idiomatické použitie zostáva YAML.

Je YAML skutočne nadmnožinou JSON?

Od YAML 1.2 áno: akýkoľvek validný JSON dokument je validný YAML dokument. To umožňuje vložiť JSON do YAML súboru bez modifikácie, čo je praktické pre generované alebo skopírované bloky.