Co je převod JSON ↔ YAML?
JSON (JavaScript Object Notation, RFC 8259) je striktní textový formát se závorkami pro strukturovaná data; YAML (YAML Ain't Markup Language, verze 1.2) je nadmnožina JSON, která používá odsazení, zalomení řádků a lidsky čitelnou syntaxi pro stejný hodnotový model. Převod mezi nimi umožňuje přepínat stejnou konfiguraci mezi strojově přívětivou formou (JSON pro API, validaci schématu, programové transformace) a lidsky přívětivou formou (YAML pro code review, Kubernetes manifesty, GitHub Actions workflow) bez přepisování jediného klíče.
Jak funguje převod JSON ↔ YAML?
Každý převod probíhá lokálně ve vašem prohlížeči pomocí knihovny js-yaml (MIT, verze 4.1.0). Hlavní kroky jsou:
- Selektor režimu (Auto-detect / JSON → YAML / YAML → JSON) rozhoduje, který pipeline běží. V režimu Auto-detect první neprázdný znak vstupu určuje směr —
{nebo[znamená JSON; cokoli jiného znamená YAML. - JSON → YAML:
JSON.parsevaliduje vstup a vytvoří JavaScript hodnotu;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })zapíše YAML 1.2 formu. S vícedokumentovým režimem je vstupní pole vypsáno jako jeden element na dokument a spojeno oddělovači---. - YAML → JSON:
jsyaml.loadAllparsuje každý dokument ve vstupu (zpracovává oddělovače---automaticky) do pole; jedno-dokumentové vstupy jsou rozbaleny, takže JSON výstup je samotný dokument, ne jednoprvkové pole. - Odsazení (2 nebo 4 mezery) a Hezky vytisknout jsou konfigurovatelné. Vypnutím Hezky vytisknout vzniká minifikovaný JSON pomocí
JSON.stringify(value)bez bílých znaků. - Výstup je zapsán do textového pole pouze pro čtení. Při selhání parsování YAML chybová zpráva zahrnuje 1-indexovaný řádek a sloupec hlášený
js-yaml'se.mark, takže můžete skočit přímo k chybě.
Proč převádět JSON a YAML s tímto nástrojem?
- Soukromí: každé parsování, transformace a emise probíhá ve vašem prohlížeči. Data — včetně Kubernetes tajemství, podepsaných JWT a proprietárních konfigurací — se nikdy nedostanou na naše servery.
- Vícedokumentový YAML:
jsyaml.loadAllrozpoznává oddělovače---a vrací pole dokumentů, které převodník rozbaluje pro jedno-dokumentové případy nebo zachovává jako JSON pole pro vícedokumentové případy. - Kotvy a aliasy vyřešeny: YAML mechanismus
&anchor/*aliasje zpracován výchozím schématem js-yaml. Hodnota definovaná jednou a referencovaná dvakrát se převede do JSON objektu, kde všechny reference drží stejné hodnoty. - Žádné CDN, žádná telemetrie: knihovna
js-yaml.min.jsje dodávána ze stejné domény jako stránka, takže nástroj funguje offline, za firemními proxy a uvnitř air-gapped prostředí.
Jaká jsou běžná použití převodu JSON ↔ YAML?
Přepínání mezi JSON a YAML se objevuje napříč DevOps, platformním inženýrstvím a API nástroji:
- Kubernetes manifesty: převod YAML
Deployment,ConfigMapneboHelmReleasena JSON, aby jej interní policy validátor (Joi, Ajv, OPA Rego) mohl lintovat programově, pak zpět na YAML pro cluster apply. - CI/CD workflow: převod GitHub Actions
workflow.ymlpřes JSON, aby code-generátor mohl přepsat matrix nebo závislosti úloh, pak emise vyčištěného YAML pro PR. - OpenAPI spec: vložení JSON
openapi.jsonz auto-generované dokumentace backendu a převod naopenapi.yamlpro lidsky upravovanou referenci zkontrolovanou do repozitáře.
Jak vypadá příklad převodu JSON ↔ YAML?
Vložení {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} a stisknutí PŘEVÉST v režimu JSON → YAML vytvoří osm řádků odsazeného YAML s apiVersion: apps/v1 na prvním řádku. Vložení toho YAML zpět v režimu YAML → JSON s Hezky vytisknout zapnutým vrátí původní objekt bajt po bajtu po stabilním JSON.stringify(value, null, 2), s pořadím klíčů zachovaným, protože výchozí schéma js-yaml ctí pořadí vkládání v obou směrech.
Běží tento převodník JSON ↔ YAML zcela v mém prohlížeči?
Ano. Každé parsování, transformace a emise probíhá lokálně jako JavaScript uvnitř vaší záložky. Knihovna js-yaml je dodávána ze stejné domény jako stránka — žádné CDN, žádné fetch, žádné XMLHttpRequest, žádné navigator.sendBeacon na vstupu. Nástroj také funguje offline po načtení stránky, protože je to statický HTML/CSS/JS balíček s vendor knihovnou zkopírovanou vedle. Kubernetes tajemství, JWT payloady, podepsané CloudFormation YAML a proprietární konfigurace zůstávají na vašem zařízení.
Jak převodník zpracovává vícedokumentový YAML?
YAML podporuje více dokumentů v jednom streamu oddělených řádky obsahujícími pouze ---. Při YAML → JSON převodník volá jsyaml.loadAll, který vrací každý dokument jako JavaScript hodnotu. Pokud je nalezen přesně jeden dokument, JSON výstup je tento dokument přímo; pokud jsou nalezeny dva nebo více, JSON výstup je pole. Při JSON → YAML, když je vstup JSON pole A přepínač Více dokumentů je zapnut, každý element pole je emitován jako vlastní dokument s oddělovači --- mezi nimi — užitečné pro generování balíčku přívětivého pro kubectl apply z JSON pole zdrojů.
Jsou YAML kotvy a aliasy podporovány?
Ano — definice &anchor a reference *alias jsou vyřešeny výchozím schématem js-yaml během kroku načítání. YAML vstup jako defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d se parsuje na JSON objekt, kde job_a a job_b oba obsahují retries: 3, timeout: 30. Merge key << (YAML 1.1 rozšíření, které js-yaml stále ctí) je také podporováno na výchozím schématu.
Jsou YAML komentáře zachovány při převodu na JSON a zpět?
Ne — js-yaml odstraňuje komentáře během kroku parsování, takže převod YAML → JSON → YAML ztratí každý řádek s předponou #. Toto je známé omezení modelu load/dump; pokud je zachování komentářů kritické, použijte knihovnu vědomou si komentářů jako npm balíček yaml (který dodává CST + AST API navržené k zachování trivia) místo js-yaml. Pro většinu konfiguračních převodních workflow je kompromis přijatelný: převedený YAML si zachovává každý klíč, hodnotu, kotvu a alias, jen bez lidsky psaných komentářů.
Co se stane s vlastními YAML tagy?
Převodník používá DEFAULT_SCHEMA knihovny js-yaml, který rozumí !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary a !!timestamp — všechny tagy v YAML 1.2 core a JSON schématech. Vlastní nebo aplikačně specifické tagy (např. !Ref v CloudFormation, !vault v Ansible) nejsou rozpoznány a zobrazí se jasná chyba s uvedením nepodporovaného tagu. Pro CloudFormation konkrétně použijte flow aws cloudformation package + --output-template-file k rozšíření vlastních tagů před vložením do tohoto převodníku.
Tento JSON ↔ YAML převodník se dodává s js-yaml@4.1.0 zabaleným na stejné doméně, podporuje vícedokumentové streamy a kotvy/aliasy ihned po vybalení a hlásí chyby parsování YAML s řádkem a sloupcem, abyste mohli opravit zdroj. Žádné nahrávání, žádné CDN, žádná telemetrie — každý bajt zůstává ve vašem prohlížeči.