JSON vs YAML - Který formát dat použít?

Podrobné srovnání formátů JSON a YAML. Zjistěte, kdy použít JSON a kdy YAML, rozdíly v syntaxi, výkonu a čitelnosti.

Porovnání JSON a YAML

Porovnání obou možností podle klíčových vlastností.

Vlastnost JSON YAML
Readability Good Excellent
Parsing Speed Very Fast Slower
File Size Larger (brackets) Smaller (indent)
Comments Support No Yes
Language Support Universal Growing
Security Risk Low Higher (YAML bombs)
Schema Validation Strong (JSON Schema) Limited
Learning Curve Easy Moderate
Nejlepší Střední Slabé ✓ = vítěz v řádku

Kdy použít - shrnutí

JSON

API, výměna dat mezi službami a konfigurační soubory konzumované JavaScriptem.

YAML

Konfigurace psaná lidmi (Docker Compose, Kubernetes), CI/CD pipeline a dokumentace s komentáři.

Kdy použít jednotlivé formáty

Kdy použít JSON

  • REST API request and response bodies
  • Configuration files consumed by JavaScript apps
  • NoSQL database storage (MongoDB, DynamoDB)
  • Data exchange between microservices and web hooks
  • Package manifests like package.json and tsconfig.json

Kdy použít YAML

  • Docker Compose and Kubernetes manifest files
  • CI/CD pipeline definitions (GitHub Actions, GitLab CI)
  • Human-edited configuration with comments (Ansible, Prometheus)
  • Documentation front matter (Jekyll, Hugo, MkDocs)
  • CloudFormation and Serverless Framework templates

Často kladené otázky

Je YAML nadmnožinou JSON?
Ne, jde o častou mylnou představu. Ačkoli byl YAML 1.2 navržen tak, aby mohl být JSON použit jako platná podmnožina, v praxi se oba parsery liší. JSON je platným YAML vždy pouze u konkrétních parserů YAML 1.2 a mnoho reálně používaných knihoven YAML následuje sémantiku YAML 1.1, která libovolný JSON nepřijímá.
Který formát se parsuje rychleji — JSON nebo YAML?
JSON se parsuje výrazně rychleji téměř v každém jazykovém prostředí. Parsery JSON vycházejí z jednoduchých oddělovačů, jako jsou složené závorky a uvozovky, zatímco YAML musí interpretovat významné bílé znaky, kotvy (anchors), aliasy a vícedokumentové proudy. Benchmarky běžně ukazují, že parsování JSON je u ekvivalentních dat 3-10x rychlejší než parsování YAML.
Mohu do JSON přidávat komentáře?
Standardní JSON (RFC 8259) komentáře nepodporuje. Běžnými obejitími jsou vyhrazený klíč, například "_comment", nebo přechod na nadmnožiny JSONC, JSON5 či HJSON. YAML komentáře podporuje nativně pomocí znaku #, což je jedna z jeho hlavních výhod u ručně upravované konfigurace.
Co je to YAML bomb a jak se mu vyhnout?
YAML bomb (útok billion laughs) využívá kotvy (anchors) a aliasy YAML k exponenciálnímu rozrůstání malého souboru, které vyčerpá paměť. Abyste se mu vyhnuli, použijte parser, který rozšiřování aliasů zakazuje nebo omezuje hloubku dokumentu, a nikdy neparsujte YAML z nedůvěryhodného zdroje. JSON vůči této třídě útoků zranitelný není.
Mám pro manifesty Kubernetes použít JSON nebo YAML?
Kubernetes přijímá obojí, ale standardem v komunitě je YAML, protože podporuje komentáře, vícedokumentové soubory oddělené pomocí --- a je kompaktnější pro ruční úpravy. JSON se hodí pro strojově generované manifesty a API volání pomocí kubectl apply -f.

Související nástroje