Konverzia medzi JSON a YAML
- Dashboard
- Dokumentácia
- API
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.parseaJSON.stringifybez závislosti. - Úložisko na strane prehliadača:
localStorage,sessionStorage, IndexedDB. - AJAX a
fetchdotazy. - 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Č01234neúvodzovkované sa stáva celým číslom1234, a názov krajinyNO(Nórsko) sa stávafalse. 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/offako booleany, čo 1.2 odstránila. Správanie sa líši aj na číslach v base 8. - Implicitné dátumy:
2024-01-15bez ú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:
- Vložte váš zdrojový dokument (JSON alebo YAML) do vstupného poľa.
- Vyberte požadovaný smer konverzie (JSON na YAML, alebo YAML na JSON).
- Kliknite na tlačidlo konverzie: formátovaný výsledok sa objaví vo výstupnej zóne.
- 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ástrojeGET https://cdrn.fr/api/v1/tools/json-yaml-converter- získa schému tohto nástrojaPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- spustí tento nástroj s JSON payloadom