Ce este conversia JSON ↔ YAML?
JSON (JavaScript Object Notation, RFC 8259) este un format text strict, delimitat cu acolade pentru date structurate; YAML (YAML Ain't Markup Language, versiunea 1.2) este un superset al JSON care folosește indentarea, liniile noi și o sintaxă lizibilă pentru același model de valori. Convertirea între ele îți permite să pivotezi aceeași configurare între o formă prietenoasă mașinilor (JSON pentru API-uri, validare de schemă, transformări programatice) și o formă prietenoasă oamenilor (YAML pentru revizuire de cod, manifeste Kubernetes, fluxuri GitHub Actions) fără a retasta o singură cheie.
Cum funcționează conversia JSON ↔ YAML?
Fiecare conversie rulează local în browserul tău folosind biblioteca js-yaml (MIT, versiunea 4.1.0). Pașii principali sunt:
- Selectorul de mod (Detectare automată / JSON → YAML / YAML → JSON) decide ce pipeline rulează. În modul Detectare automată, primul caracter non-spațiu al intrării alege direcția —
{sau[înseamnă JSON; orice altceva înseamnă YAML. - JSON → YAML:
JSON.parsevalidează intrarea și produce o valoare JavaScript;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })scrie forma YAML 1.2. Cu Multi-document activat, un tablou de intrare este descărcat câte un element per document și unite cu separatoare---. - YAML → JSON:
jsyaml.loadAllparsează fiecare document din intrare (gestionând separatoarele---automat) într-un tablou; intrările cu un singur document sunt dezvăluite astfel încât ieșirea JSON să fie documentul însuși, nu un tablou cu un element. - Indentarea (2 sau 4 spații) și Printarea frumoasă sunt configurabile. Printarea frumoasă dezactivată emite JSON minificat prin
JSON.stringify(value)fără spații albe. - Rezultatul este scris în căsuța de text doar pentru citire. La eșecuri de parsare YAML, mesajul de eroare include linia și coloana indexate de la 1 raportate de
e.markaljs-yamlpentru a sări direct la eroare.
De ce să convertești JSON și YAML cu acest instrument?
- Confidențialitate: fiecare parsare, transformare și emitere are loc în browserul tău. Datele — inclusiv secrete Kubernetes, JWT-uri semnate și configurări proprietare — nu ajung niciodată pe serverele noastre.
- YAML multi-document:
jsyaml.loadAllrecunoaște separatoarele---și returnează un tablou de documente, pe care convertorul le dezvăluie pentru cazurile cu un singur document sau le păstrează ca tablou JSON pentru cazurile cu mai multe documente. - Ancore și aliasuri rezolvate: mecanismul
&anchor/*aliasal YAML este gestionat de schema implicită ajs-yaml. O valoare definită o dată și referită de două ori face călătoria dus-întors la un obiect JSON unde toate referințele dețin valori egale. - Fără CDN, fără telemetrie: biblioteca
js-yaml.min.jseste livrată din aceeași origine ca pagina, astfel încât instrumentul funcționează offline, în spatele proxy-urilor corporative și în medii izolate.
Care sunt aplicațiile comune ale conversiei JSON ↔ YAML?
Pivotarea între JSON și YAML apare frecvent în DevOps, ingineria platformelor și instrumentele API:
- Manifeste Kubernetes: convertirea unui
Deployment,ConfigMapsauHelmReleaseYAML în JSON pentru ca un validator intern de politici (Joi, Ajv, OPA Rego) să îl verifice programatic, apoi înapoi în YAML pentru aplicarea în cluster. - Fluxuri CI/CD: călătoria dus-întors a unui
workflow.ymlGitHub Actions prin JSON pentru ca un generator de cod să rescrie matricea sau dependențele joburilor, apoi emiterea YAML-ului curățat pentru PR. - Specificații OpenAPI: lipirea unui
openapi.jsonJSON din documentația auto-generată a unui backend și convertirea înopenapi.yamlpentru referința editată manual verificată în depozit.
Cum arată un exemplu de călătorie dus-întors JSON ↔ YAML?
Lipind {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} și apăsând CONVERTEȘTE în modul JSON → YAML produce opt linii de YAML indentat cu apiVersion: apps/v1 pe prima linie. Introducând acel YAML înapoi în modul YAML → JSON cu Printare frumoasă activată returnează obiectul original octet cu octet după un JSON.stringify(value, null, 2) stabil, cu ordinea cheilor păstrată deoarece schema implicită a js-yaml onorează ordinea inserării în ambele direcții.
Acest convertor JSON ↔ YAML rulează complet în browserul meu?
Da. Fiecare parsare, transformare și emitere rulează local ca JavaScript în fila browserului tău. Biblioteca js-yaml inclusă este livrată din aceeași origine ca pagina — fără CDN, fără fetch, fără XMLHttpRequest, fără navigator.sendBeacon pe intrare. Instrumentul funcționează și offline după încărcarea paginii, deoarece este un pachet static HTML/CSS/JS cu biblioteca vendor copiată alături. Secretele Kubernetes, sarcinile JWT, YAML-urile CloudFormation semnate și configurările proprietare rămân pe dispozitivul tău.
Cum gestionează convertorul YAML-ul multi-document?
YAML suportă mai multe documente într-un singur flux, separate prin linii care conțin doar ---. La YAML → JSON, convertorul apelează jsyaml.loadAll, care returnează fiecare document ca o valoare JavaScript. Dacă se găsește exact un document, ieșirea JSON este acel document direct; dacă se găsesc două sau mai multe, ieșirea JSON este un tablou. La JSON → YAML, când intrarea este un tablou JSON ȘI comutatorul Multi-document este activat, fiecare element al tabloului este emis ca propriul document cu separatoare --- între ele — util pentru generarea unui pachet compatibil cu kubectl apply dintr-un tablou JSON de resurse.
Sunt suportate ancorele și aliasurile YAML?
Da — definițiile &anchor și referințele *alias sunt rezolvate de schema implicită a js-yaml în timpul pasului de încărcare. O intrare YAML precum defaults: &d
retries: 3
timeout: 30
job_a:
<<: *d
job_b:
<<: *d se parsează la un obiect JSON unde job_a și job_b conțin ambele retries: 3, timeout: 30. Cheia de îmbinare << (o extensie YAML 1.1 pe care js-yaml încă o onorează) este, de asemenea, suportată pe schema implicită.
Sunt păstrate comentariile YAML la convertirea în JSON și înapoi?
Nu — js-yaml elimină comentariile în timpul pasului de parsare, astfel încât o călătorie dus-întors YAML → JSON → YAML va pierde fiecare linie prefixată cu #. Aceasta este o limitare cunoscută a modelului load/dump; dacă păstrarea comentariilor este critică, folosește o bibliotecă care ține cont de comentarii, precum pachetul npm yaml (care livrează o API CST + AST concepută pentru a păstra trivia) în loc de js-yaml. Pentru majoritatea fluxurilor de conversie a configurațiilor, compromisul este acceptabil: YAML-ul convertit dus-întors păstrează fiecare cheie, valoare, ancoră și alias, doar fără comentariile scrise de oameni.
Ce se întâmplă cu etichetele YAML personalizate?
Convertorul folosește DEFAULT_SCHEMA al js-yaml, care înțelege !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary și !!timestamp — fiecare etichetă din schemele de bază și JSON ale YAML 1.2. Etichetele personalizate sau specifice aplicației (de exemplu, !Ref în CloudFormation, !vault în Ansible) nu sunt recunoscute și generează o eroare clară care citează eticheta nesuportată. Pentru CloudFormation în mod specific, folosește fluxul aws cloudformation package + --output-template-file pentru a extinde etichetele personalizate înainte de a le lipi în acest convertor.
Acest convertor JSON ↔ YAML livrează js-yaml@4.1.0 inclus la aceeași origine, suportă fluxuri multi-document și ancore/aliasuri din cutie și raportează erorile de parsare YAML cu linie și coloană pentru a putea corecta sursa. Fără încărcare, fără CDN, fără telemetrie — fiecare octet rămâne în browserul tău.