Konverzia medzi JSON a YAML

konvertuje JSON do YAML (a naopak) pri zachovaní štruktúry, s konfigurovateľným odsadením. Praktické na migráciu konfigurácie medzi súbormi .json a .yaml

Na čo slúži tento JSON / YAML konvertor?

Tento nástroj transformuje YAML dokument na JSON a naopak, pri zachovaní dátovej štruktúry (objekty, polia, skalárne typy). Konverzia JSON na YAML alebo YAML na JSON je bežná operácia vo vývoji: generujeme OpenAPI YAML súbor z JSON spec, konvertujeme výstup REST API na YAML pre commitnutie do konfiguračného repozitára, prekladáme YAML Kubernetes manifest na JSON pre kubectl --dry-run=client -o json, alebo zarovnávame GitHub Actions workflow s JSON schémou. Vo všeobecnosti je to most medzi svetom výmeny dát (JSON) a ručne editovateľnej konfigurácie (YAML).

YAML vs JSON: priame porovnanie

JSON a YAML adresujú podobné potreby, ale odlišné prípady použitia. Nasledujúca tabuľka sumarizuje hlavné technické rozdiely, užitočné pre výber medzi nimi podľa kontextu.

Kritérium JSON YAML
Ľudská čitateľnosť Stredná (zložené zátvorky, úvodzovky všade) Silná (odsadenie, málo interpunkcie)
Verbosita Verbose Stručnejší
Komentáre Nepodporované Podporované (# komentar)
Viaceré dokumenty v jednom súbore Nie Áno, cez separátor ---
Anchors a aliases (znovupoužitie) Nie Áno (&anchor a *anchor)
Typový systém Striktný (string, number, bool, null, array, object) Implicitná koercia (yes, no, null, dátumy, interpretované skaláre)
Parsing výkon Veľmi rýchly, natívne parsery všade Pomalší, oveľa širšia gramatika
Adopcia pre REST API De facto štandard Zriedkavé
Adopcia pre konfiguráciu Zriedkavé (okrem package.json, tsconfig.json) De facto štandard (Kubernetes, CI/CD, Ansible)

Kedy používať JSON?

JSON sa vyžaduje, akonáhle program hovorí s iným programom. Jeho typické prípady použitia:

  • REST a GraphQL API: request a response payloady.
  • Výmena dát medzi mikroservismi a message queues.
  • Natívny JavaScript kód: JSON.parse a JSON.stringify bez závislosti.
  • Úložisko na strane prehliadača: localStorage, sessionStorage, IndexedDB.
  • AJAX a fetch dotazy.
  • Binárne alebo stream-orientované varianty: BSON (MongoDB), JSON Lines (logy, ML datasety), MessagePack.
  • JS / TS toolingové konfigurácie: package.json, tsconfig.json, composer.json.

Kedy používať YAML?

YAML sa vyžaduje, akonáhle človek pravidelne edituje súbor. Jeho typické prípady použitia:

  • Docker Compose (docker-compose.yml) a stack profily.
  • Kubernetes manifesty (Deployment, Service, Ingress, Helm charts).
  • Ansible playbooks a inventáre.
  • CI/CD pipelines: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
  • OpenAPI / Swagger a AsyncAPI špecifikácie.
  • Anotovaná aplikačná konfigurácia (Symfony, Spring Boot, Rails), kde sú komentáre užitočné.
  • Súbory často editované ručne, kde stručnosť a čitateľnosť prevažujú nad parsing rýchlosťou.

Bežné pasti v YAML

YAML je permisívnejší ako JSON, čo z neho robí mocný, ale zradný formát. Najčastejšie pasti:

  • Odsadenie: tabulátory sú špecifikáciou zakázané, iba medzery sú validné. Miešanie oboch alebo zmena počtu medzier v rovnakom bloku porušuje parsing.
  • Automatická koercia skalárov: yes, no, on, off, true, false, null, None, ~ sú parsované ako booleany alebo null. Pascová ukážka: PSČ 01234 neúvodzovkované sa stáva celým číslom 1234, a názov krajiny NO (Nórsko) sa stáva false. Vždy úvodzovkovať dvojzmyselné reťazce.
  • Viacriadkové strings: | (block literal) zachováva zlomy riadkov tak, ako sú, kým > (folded) nahrádza zlomy riadkov medzerami. Chomping indikátory - a + upravujú správanie na finálnom zlome.
  • YAML 1.1 vs 1.2: 1.1 (stále veľmi rozšírená, napríklad cez PyYAML defaultne) spracováva yes/no/on/off ako booleany, čo 1.2 odstránila. Správanie sa líši aj na číslach v base 8.
  • Implicitné dátumy: 2024-01-15 bez úvodzoviek je niektorými parsermi interpretované ako date objekt, nie ako reťazec.

Príklady vedľa seba

Rovnaký dokument vyjadrený v JSON a potom v YAML. Jednoduchá konfigurácia aplikácie s jej závislosťami a prostredím:

JSON verzia

{
    "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 verzia

# Konfiguracia aplikacie
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 verzia je o približne 25 % kratšia v znakoch, akceptuje komentár v hlavičke a číta sa ako zoznam vlastností bez syntaktického šumu.

Ako používať konvertor

Kroky pre konverziu vašich dát:

  1. Vložte váš zdrojový dokument (JSON alebo YAML) do vstupného poľa.
  2. Vyberte požadovaný smer konverzie (JSON na YAML, alebo YAML na JSON).
  3. Kliknite na tlačidlo konverzie: formátovaný výsledok sa objaví vo výstupnej zóne.
  4. Overte render, potom použite tlačidlo kopírovania pre získanie výsledku do schránky.

Konverzia sa vykonáva lokálne vo vašom prehliadači alebo cez dedikovanú serverovú rutu podľa toolingu: žiadne citlivé dáta nie sú uchovávané.

Často kladené otázky

JSON alebo YAML pre moje konfiguračné súbory?

Ak ekosystém vyžaduje formát (Kubernetes v YAML, package.json v JSON), nasledujte konvenciu. Inak preferujte YAML pre dlhé a anotované konfigurácie, ktoré editujete ručne, a JSON pre konfigurácie generované programom alebo konzumované kódom. Prítomnosť užitočných komentárov je často rozhodujúcim argumentom v prospech YAML.

Ako zachovať komentáre pri round-tripe YAML na JSON na YAML?

Nemôžete. JSON nepodporuje komentáre: akonáhle konvertujeme YAML na JSON, komentáre sú definitívne stratené. Pre zachovanie komentárov pri programatických úpravách použite parser, ktorý zachováva formátovanie, ako ruamel.yaml v Pythone v round-trip móde, alebo sa kompletne vyhnite priechodu cez JSON.

Prečo môj YAML súbor parsuje korektne lokálne, ale zlyhá v produkcii?

Časté príčiny: rôzne verzie parsera (YAML 1.1 vs 1.2), tabulátory zavedené editorom, neúvodzovkované hodnoty pripomínajúce booleany (NO, off) alebo čísla (01234), kódovanie súboru (zle spravované UTF-8 BOM). Systematicky úvodzovkujte dvojzmyselné reťazce a fixujte verziu parsera vo vašom projekte.

Je JSON podmnožinou YAML?

Od YAML 1.2 áno, v praxi: každý validný JSON dokument je validný YAML 1.2 dokument. Opak je falošný: YAML dokument používajúci komentáre, anchors, implicitné dátumy alebo viaceré dokumenty v súbore nemôže byť priamo vyjadrený v JSON bez straty informácie.

Aké alternatívy k JSON a YAML poznať?

TOML: populárny pre konfiguráciu (Cargo, pyproject.toml), dobrý kompromis čitateľnosti a explicitného typovania. INI: veľmi jednoduchý, ale žiadna štandardná vnorená štruktúra. XML: verbose, ale relevantný pre SOAP a niektoré Java legacy konfigurácie. HCL: používaný Terraformom. JSON5 a JSONC: rozšírenia JSON, ktoré povoľujú komentáre a trailing comma.

Aká je váha YAML vs JSON?

Pri ekvivalentnej štruktúre je YAML zvyčajne o 15 až 30 % kratší v bajtoch, vďaka absencii úvodzoviek okolo kľúčov a väčšiny reťazcov a absencii zložených zátvoriek. Na wire (HTTP transport) minifikovaný JSON zostáva porovnateľný, ale YAML zostáva kompaktnejší v čitateľnej verzii. Pre čistý parsing výkon je JSON niekoľkokrát rýchlejší, čo ospravedlňuje jeho použitie pre vysokopremávkové API.

Ukážka požiadavky

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é Predvolené
json text
space_tabulation integer

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všetky dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - získa schému tohto nástroja
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - spustí tento nástroj s JSON payloadom