Mi az a JSON ↔ YAML konverzió?
A JSON (JavaScript Object Notation, RFC 8259) egy szigorú, kapcsos zárójeles szöveges formátum strukturált adatokhoz; a YAML (YAML Ain't Markup Language, 1.2 verzió) a JSON egy szuperhalmaza, amely behúzást, sortöréseket és emberi olvasásra alkalmas szintaxist használ ugyanahhoz az értékmodellhez. A köztük való konvertálás lehetővé teszi ugyanazon konfiguráció átfordítását a gépbarát forma (JSON API-khoz, séma érvényesítéshez, programozott átalakításokhoz) és az emberbarát forma (YAML kódellenőrzéshez, Kubernetes manifestekhez, GitHub Actions munkafolyamatokhoz) között anélkül, hogy egyetlen kulcsot is újra kellene gépelni.
Hogyan működik a JSON ↔ YAML konverzió?
Minden konverzió helyben fut a böngészőjében a beépített js-yaml könyvtár használatával (MIT, 4.1.0 verzió). A magas szintű lépések:
- A módválasztó (Automatikus felismerés / JSON → YAML / YAML → JSON) dönti el, melyik folyamat fut. Automatikus felismerés módban a bemenet első nem szóköz karaktere határozza meg az irányt —
{vagy[JSON-t jelent; bármi más YAML-t. - JSON → YAML: a
JSON.parseérvényesíti a bemenetet és egy JavaScript értéket hoz létre; ajsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })kiírja a YAML 1.2 formát. Bekapcsolt Több dokumentum opcióval egy bemeneti tömb elemenként egy dokumentumba kerül kiírásra, és---elválasztókkal van összefűzve. - YAML → JSON: a
jsyaml.loadAllelemzi a bemenet minden dokumentumát (automatikusan kezelve a---elválasztókat) egy tömbben; az egy-dokumentumos bemenetek kicsomagolásra kerülnek, így a JSON kimenet maga a dokumentum, nem egy egyelemű tömb. - A behúzás (2 vagy 4 szóköz) és a Szép nyomtatás konfigurálható. A Szép nyomtatás kikapcsolva tömörített JSON-t bocsát ki a
JSON.stringify(value)segítségével szóközök nélkül. - A kimenet az írásvédett szövegmezőbe kerül. YAML elemzési hibák esetén a hibaüzenet tartalmazza a
js-yamle.markáltal jelentett 1-alapú sort és oszlopot, így közvetlenül a hibához ugorhat.
Miért konvertáljon JSON-t és YAML-t ezzel az eszközzel?
- Adatvédelem: minden elemzés, átalakítás és kibocsátás a böngészőjében történik. Az adatok — beleértve a Kubernetes titkokat, aláírt JWT-ket és védett konfigurációkat — soha nem érik el a szervereinket.
- Több dokumentumos YAML: a
jsyaml.loadAllfelismeri a---elválasztókat, és dokumentumok tömbjét adja vissza, amelyet a konverter kicsomagol egy-dokumentumos esetekben, vagy JSON tömbként őriz meg több-dokumentumos esetekben. - Horgonyok és álnevek feloldva: a YAML
&anchor/*aliasmechanizmusát ajs-yamlalapértelmezett sémája kezeli. Egy egyszer definiált és kétszer hivatkozott érték olyan JSON objektumba jár körbe, ahol minden hivatkozás egyenlő értékeket tartalmaz. - Nincs CDN, nincs telemetria: a
js-yaml.min.jskönyvtár ugyanarról az eredetről származik, mint az oldal, így az eszköz offline, vállalati proxyk mögött és légmentes környezetekben is működik.
Mik a JSON ↔ YAML konverzió gyakori alkalmazásai?
A JSON és YAML közötti váltás a DevOps, a platform mérnöki munka és az API eszköztár során merül fel:
- Kubernetes manifestek: egy YAML
Deployment,ConfigMapvagyHelmReleaseJSON-ba konvertálása, hogy egy házi készítésű házirend-érvényesítő (Joi, Ajv, OPA Rego) programozottan ellenőrizhesse, majd vissza YAML-ba a fürt alkalmazáshoz. - CI/CD munkafolyamatok: egy GitHub Actions
workflow.ymlköröztetése JSON-on keresztül, hogy egy kódgenerátor átírja a mátrixot vagy a feladat függőségeket, majd a megtisztított YAML kibocsátása a PR-hez. - OpenAPI specifikációk: egy JSON
openapi.jsonbeillesztése a backend automatikusan generált dokumentációjából és konvertálásaopenapi.yaml-lá az ember által szerkesztett referenciához, amely a repóba van bejelölve.
Hogyan néz ki egy JSON ↔ YAML körút példa?
Illessze be a {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}}-et, és nyomja meg a KONVERTÁLÁS gombot JSON → YAML módban. Az eredmény nyolc sor behúzott YAML, a apiVersion: apps/v1-gyel az első sorban. Ha ezt a YAML-t visszaadja YAML → JSON módban bekapcsolt Szép nyomtatással, az eredeti objektumot kapja vissza bájtról bájtra egy stabil JSON.stringify(value, null, 2) után, a kulcssorrend megőrzésével, mert a js-yaml alapértelmezett sémája mindkét irányban tiszteletben tartja a beszúrási sorrendet.
Ez a JSON ↔ YAML konverter teljes egészében a böngészőmben fut?
Igen. Minden elemzési, átalakítási és kibocsátási lépés JavaScriptként fut a böngésző lapján belül. A beépített js-yaml könyvtár ugyanarról az eredetről származik, mint az oldal — nincs CDN, nincs fetch, nincs XMLHttpRequest, nincs navigator.sendBeacon a bemeneten. Az eszköz offline is működik, miután az oldal betöltődött, mert egy statikus HTML/CSS/JS csomag, a szállítói könyvtárral együtt. A Kubernetes titkok, JWT adattartalmak, aláírt CloudFormation YAML-ek és védett konfigurációk az Ön eszközén maradnak.
Hogyan kezeli a konverter a több dokumentumos YAML-t?
A YAML támogatja a több dokumentumot egy adatfolyamban, amelyeket csak ----t tartalmazó sorok választanak el. YAML → JSON irányban a konverter meghívja a jsyaml.loadAll-t, amely minden dokumentumot JavaScript értékként ad vissza. Ha pontosan egy dokumentum található, a JSON kimenet közvetlenül az a dokumentum; ha kettő vagy több található, a JSON kimenet egy tömb. JSON → YAML irányban, amikor a bemenet egy JSON tömb ÉS a Több dokumentum kapcsoló be van kapcsolva, minden tömb elem saját dokumentumként kerül kibocsátásra --- elválasztókkal közöttük — hasznos egy kubectl apply-barát csomag generálásához egy JSON erőforrás tömbből.
Támogatottak a YAML horgonyok és álnevek?
Igen — a &anchor definíciók és a *alias hivatkozások a js-yaml alapértelmezett sémája által feloldásra kerülnek a betöltési lépés során. Egy olyan YAML bemenet, mint a defaults: &d
retries: 3
timeout: 30
job_a:
<<: *d
job_b:
<<: *d egy olyan JSON objektumba elemződik, ahol a job_a és a job_b is tartalmazza a retries: 3, timeout: 30 értékeket. Az << összefésülés kulcs (egy YAML 1.1 kiterjesztés, amelyet a js-yaml továbbra is tiszteletben tart) szintén támogatott az alapértelmezett sémán.
Megmaradnak a YAML megjegyzések a JSON-ba konvertáláskor és vissza?
Nem — a js-yaml eltávolítja a megjegyzéseket az elemzési lépés során, így egy YAML → JSON → YAML körút elveszít minden #-előtaggal ellátott sort. Ez a betöltés/kiírás modell ismert korlátozása; ha a megjegyzések megőrzése kritikus, használjon megjegyzés-tudatos könyvtárat, mint a yaml npm csomag (amely egy CST + AST API-val rendelkezik, amelyet a trivia megőrzésére terveztek) a js-yaml helyett. A legtöbb konfiguráció-konverziós munkafolyamatnál a kompromisszum elfogadható: a körbejárt YAML megtart minden kulcsot, értéket, horgonyt és álnevet, csak az ember által írt megjegyzések nélkül.
Mi történik az egyéni YAML tag-ekkel?
A konverter a js-yaml DEFAULT_SCHEMA-ját használja, amely érti a !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary és !!timestamp tageket — a YAML 1.2 core és JSON sémák összes tag-jét. Az egyéni vagy alkalmazás-specifikus tagek (pl. !Ref a CloudFormation-ben, !vault az Ansible-ben) nem kerülnek felismerésre, és egyértelmű hibaként jelennek meg, hivatkozva a nem támogatott tag-re. Kifejezetten CloudFormation esetén használja az aws cloudformation package + --output-template-file folyamatot az egyéni tag-ek kibontásához, mielőtt beillesztené ebbe a konverterbe.
Ez a JSON ↔ YAML konverter a js-yaml@4.1.0-val érkezik, ugyanarról az eredetről csomagolva, támogatja a több dokumentumos adatfolyamokat és a horgonyokat/álneveket a dobozból, és a YAML elemzési hibákat sorral és oszloppal jelenti, hogy kijavíthassa a forrást. Nincs feltöltés, nincs CDN, nincs telemetria — minden bájt a böngészőjében marad.