Převést mezi JSON a YAML

převádí JSON do YAML (a naopak) při zachování struktury, s konfigurovatelným odsazením. Praktické pro migraci konfigurace mezi soubory .json a .yaml

K čemu slouží tento JSON / YAML převodník?

Tento nástroj transformuje YAML dokument na JSON a obráceně, se zachováním datové struktury (objekty, pole, skalární typy). Konverze JSON na YAML, nebo YAML na JSON, je běžná operace ve vývoji: generuje se OpenAPI YAML soubor z JSON spec, převádí se výstup REST API na YAML pro commitnutí v konfiguračním repozitáři, překládá se Kubernetes YAML manifest na JSON pro kubectl --dry-run=client -o json, nebo se zarovnává GitHub Actions workflow s JSON schématem. Šířeji je to most mezi světem výměny dat (JSON) a ručně editovatelnou konfigurací (YAML).

YAML vs JSON: přímé porovnání

JSON a YAML adresují blízké potřeby ale různé případy použití. Následující tabulka shrnuje hlavní technické rozdíly, užitečné pro volbu mezi nimi podle kontextu.

Kritérium JSON YAML
Lidská čitelnost Střední (složené závorky, uvozovky všude) Silná (indentace, málo interpunkce)
Ukecanost Více ukecané Stručnější
Komentáře Nepodporované Podporované (# komentář)
Multi-dokumenty v jednom souboru Ne Ano, přes separátor ---
Anchors a aliases (znovupoužití) Ne Ano (&anchor a *anchor)
Typový systém Striktní (string, number, bool, null, array, object) Implicitní coercion (yes, no, null, data, interpretované skaláry)
Parsing výkon Velmi rychlý, nativní parsery všude Pomalejší, mnohem širší gramatika
Adopce pro REST API De facto standard Vzácné
Adopce pro konfiguraci Vzácné (kromě package.json, tsconfig.json) De facto standard (Kubernetes, CI/CD, Ansible)

Kdy používat JSON?

JSON se prosazuje, jakmile program mluví s jiným programem. Jeho typické případy použití:

  • REST a GraphQL API: payload požadavku a odpovědi.
  • Výměna dat mezi mikroslužbami a frontami zpráv.
  • Nativní JavaScript kód: JSON.parse a JSON.stringify bez závislosti.
  • Úložiště na straně prohlížeče: localStorage, sessionStorage, IndexedDB.
  • AJAX a fetch požadavky.
  • Binární nebo stream varianty: BSON (MongoDB), JSON Lines (logy, ML datasety), MessagePack.
  • Konfigurace JS / TS nástrojů: package.json, tsconfig.json, composer.json.

Kdy používat YAML?

YAML se prosazuje, jakmile člověk pravidelně edituje soubor. Jeho typické případy použití:

  • Docker Compose (docker-compose.yml) a stack profily.
  • Kubernetes manifesty (Deployment, Service, Ingress, Helm charts).
  • Ansible playbooky a inventáře.
  • CI/CD pipeliny: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
  • OpenAPI / Swagger a AsyncAPI specifikace.
  • Anotovaná aplikační konfigurace (Symfony, Spring Boot, Rails), kde jsou komentáře užitečné.
  • Soubory editované často ručně, kde stručnost a čitelnost převažují nad parsing rychlostí.

Běžné pasti v YAML

YAML je permisivnější než JSON, což z něj činí mocný ale zrádný formát. Nejčastější pasti:

  • Indentace: tabulátory jsou specifikací zakázány, pouze mezery jsou validní. Mixování obou nebo měnění počtu mezer ve stejném bloku rozbíjí parsing.
  • Automatický scalars coercion: yes, no, on, off, true, false, null, None, ~ jsou parsovány na booleany nebo null. Past příklad: poštovní směrovací číslo 01234 nekvotované se stává celým 1234, a název země NO (Norsko) se stává false. Vždy dejte do uvozovek nejednoznačné řetězce.
  • Víceřádkové strings: | (block literal) zachovává zalomení řádků jak jsou, zatímco > (folded) nahrazuje zalomení řádků mezerami. Chomping indikátory - a + upravují chování na finálním zalomení.
  • YAML 1.1 vs 1.2: 1.1 (stále velmi rozšířený, například přes PyYAML default) ošetřuje yes/no/on/off jako booleany, což 1.2 odstranil. Chování se také liší u čísel v základu 8.
  • Implicitní data: 2024-01-15 bez uvozovek je interpretováno jako datový objekt některými parsery, ne jako řetězec.

Příklady vedle sebe

Stejný dokument, vyjádřený v JSON pak v YAML. Jednoduchá konfigurace aplikace s jejími dependencies a prostředím:

JSON verze

{
    "name": "cdrn-app",
    "version": "1.14.2",
    "environment": "production",
    "dependencies": {
        "php": "^8.3",
        "symfony/framework-bundle": "^7.0",
        "doctrine/orm": "^3.0"
    },
    "features": ["cache", "mailer", "queue"],
    "debug": false
}

Ekvivalentní YAML verze

# Konfigurace aplikace
name: cdrn-app
version: 1.14.2
environment: production
dependencies:
    php: '^8.3'
    symfony/framework-bundle: '^7.0'
    doctrine/orm: '^3.0'
features:
    - cache
    - mailer
    - queue
debug: false

YAML verze je o asi 25 % kratší ve znacích, přijímá komentář v hlavičce a čte se jako seznam vlastností bez syntaktického šumu.

Jak používat převodník

Kroky k převodu vašich dat:

  1. Vložte svůj zdrojový dokument (JSON nebo YAML) do vstupního pole.
  2. Vyberte požadovaný směr převodu (JSON na YAML, nebo YAML na JSON).
  3. Klikněte na převodní tlačítko: formátovaný výsledek se objeví v oblasti výstupu.
  4. Ověřte rendering, pak použijte kopírovací tlačítko pro získání výsledku do schránky.

Převod se provádí lokálně ve vašem prohlížeči nebo přes dedikovanou serverovou cestu podle toolingu: žádná citlivá data nejsou uchována.

Často kladené otázky

JSON nebo YAML pro mé konfigurační soubory?

Pokud ekosystém vnucuje formát (Kubernetes v YAML, package.json v JSON), následujte konvenci. Jinak preferujte YAML pro dlouhé a anotované konfigurace, které editujete ručně, a JSON pro programem generované nebo kódem konzumované konfigurace. Přítomnost užitečných komentářů je často rozhodující argument ve prospěch YAML.

Jak zachovat komentáře při round-tripu YAML na JSON na YAML?

Nelze. JSON nepodporuje komentáře: jakmile převedeme YAML na JSON, komentáře jsou definitivně ztraceny. Pro zachování komentářů při programatických úpravách použijte parser, který udržuje formátování, jako ruamel.yaml v Pythonu v round-trip módu, nebo se zcela vyhněte průchodu přes JSON.

Proč můj YAML soubor parsuje správně lokálně ale selhává v produkci?

Časté příčiny: odlišné parser verze (YAML 1.1 vs 1.2), tabulátory zavedené editorem, nekvotované hodnoty připomínající booleany (NO, off) nebo čísla (01234), kódování souboru (UTF-8 BOM špatně spravované). Systematicky kvotujte nejednoznačné řetězce a fixujte verzi parseru ve svém projektu.

Je JSON podmnožinou YAML?

Od YAML 1.2 ano v praxi: každý validní JSON dokument je validní YAML 1.2 dokument. Opak je nepravdivý: YAML dokument používající komentáře, anchors, implicitní data nebo více dokumentů v souboru nemůže být přímo vyjádřen v JSON bez ztráty informace.

Jaké alternativy k JSON a YAML znát?

TOML: populární pro config (Cargo, pyproject.toml), dobrý kompromis čitelnost a explicitní typování. INI: velmi jednoduché, ale bez standardní vnořené struktury. XML: ukecané, ale zůstává relevantní pro SOAP a některé legacy Java configy. HCL: používané Terraformem. JSON5 a JSONC: JSON rozšíření přijímající komentáře a koncové čárky.

Jaká je velikost YAML vs JSON?

Při ekvivalentní struktuře je YAML obvykle o 15 až 30 % kratší v bajtech, díky absenci uvozovek kolem klíčů a většiny řetězců, a absenci složených závorek. Na wire (HTTP transport) zůstává minifikovaný JSON srovnatelný, ale YAML zůstává kompaktnější v čitelné verzi. Pro čistý parsing výkon je JSON několikrát rychlejší, což ospravedlňuje jeho použití pro vysokomovité API.

Ukázka požadavku

curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"json":"...","space_tabulation":1}'

Vstupní schéma

Pole Typ Povinné Výchozí
json text
space_tabulation integer

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všechny dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - získá schéma tohoto nástroje
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - spustí tento nástroj s JSON payloadem