Převést mezi JSON a YAML
- Dashboard
- Dokumentace
- API
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.parseaJSON.stringifybez závislosti. - Úložiště na straně prohlížeče:
localStorage,sessionStorage, IndexedDB. - AJAX a
fetchpož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í číslo01234nekvotované se stává celým1234, 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/offjako booleany, což 1.2 odstranil. Chování se také liší u čísel v základu 8. - Implicitní data:
2024-01-15bez 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:
- Vložte svůj zdrojový dokument (JSON nebo YAML) do vstupního pole.
- Vyberte požadovaný směr převodu (JSON na YAML, nebo YAML na JSON).
- Klikněte na převodní tlačítko: formátovaný výsledek se objeví v oblasti výstupu.
- 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ástrojeGET https://cdrn.fr/api/v1/tools/json-yaml-converter- získá schéma tohoto nástrojePOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- spustí tento nástroj s JSON payloadem