JSON vs YAML: diferențe și cazuri de utilizare
JSON și YAML sunt cele două formate de serializare textuale cele mai utilizate pentru a descrie date structurate: configurare aplicație, payload de API, fișiere de infrastructură, manifests Kubernetes, pipeline-uri CI/CD. Ambele reprezintă aceleași structuri fundamentale (obiecte, liste, scalari) dar cu filosofii diferite: JSON privilegiază lizibilitatea mașinii și universalitatea, YAML mizează pe lizibilitatea umană și concizia. Acest articol compară cele două formate punct cu punct pentru a te ajuta să alegi.
Ce este JSON?
JSON (JavaScript Object Notation) este un format de serializare introdus de Douglas Crockford la începutul anilor 2000, derivat din sintaxa literală a obiectului JavaScript. Standardizat prin RFC 8259 și ECMA-404, este astăzi formatul pivot al web-ului: aproape totalitatea API-urilor REST, a bazelor NoSQL și a configurațiilor frontend îl utilizează.
JSON se bazează pe două structuri:
- O colecție ordonată de perechi cheie-valoare (obiectul, între acolade)
- O listă ordonată de valori (tabloul, între paranteze drepte)
Valorile scalare sunt string, number, true,
false sau null. Șirurile sunt obligatoriu înconjurate de ghilimele
duble. JSON nu suportă comentariile.
Ce este YAML?
YAML (YAML Ain't Markup Language) este un format apărut în 2001, conceput de la început pentru a fi lizibil de către un om. Specificația actuală este YAML 1.2.2. Caracteristica sa distinctivă: utilizează indentarea pentru a exprima ierarhia, în maniera Python.
YAML este un super-set al JSON din versiunea 1.2: orice document JSON valid este un document
YAML valid. Dar YAML adaugă mult: comentarii, șiruri fără ghilimele, multi-linii, ancore
și alias-uri, tag-uri pentru tipizarea explicită, documente multiple în același fișier
(---).
Sintaxă comparată
Iată aceeași structură exprimată în cele două formate.
JSON
{
"name": "cdrn",
"version": "1.14",
"tags": ["seo", "tools", "open-source"],
"author": {
"name": "Adrien",
"email": "contact@example.com"
},
"active": true,
"stars": null
}
YAML
# Configurare proiect
name: cdrn
version: "1.14"
tags:
- seo
- tools
- open-source
author:
name: Adrien
email: contact@example.com
active: true
stars: null
Pe același conținut, YAML ocupă aproximativ același număr de linii dar evită acoladele,
parantezele drepte, virgulele de sfârșit și ghilimelele pe majoritatea șirurilor. Comentariile (linii
#) sunt autorizate.
Tipuri suportate
JSON cunoaște 6 tipuri: object, array, string,
number, boolean, null. Fără dată nativă, fără binar,
fără distincție explicită întreg/flotant.
YAML 1.2 cunoaște aceleași ca JSON și adaugă: timestamp-uri ISO 8601, binare (codate base64 prin
tag-ul !!binary), întregi și float-uri distincți, infinitul, NaN, și tipuri personalizate
prin tag-uri (!!str, !!int, !!float...). YAML 1.1 accepta
yes/no/on/off ca booleani: o capcană clasică pe parser-i vechi.
Performanță și ecosistem
JSON este tipic de 3 până la 10 ori mai rapid de parsat decât YAML, iar parser-ii săi sunt disponibili peste tot (integrați în runtime-ul aproape oricărui limbaj). Bibliotecile YAML sunt mai grele pentru că gestionează o gramatică mai bogată (anchors, tag-uri, multi-doc).
Pe partea ecosistemului: JSON domină API-urile HTTP, bazele NoSQL (MongoDB, CouchDB), fișierele
package.json, composer.json, tsconfig.json. YAML s-a impus
pentru configurarea aplicativă și infrastructura-as-code: Symfony, Spring Boot, Rails,
Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Tabel comparativ
| Criteriu | JSON | YAML |
|---|---|---|
| Lizibilitate umană | Bună | Excelentă |
| Lizibilitate mașină | Excelentă | Corectă |
| Comentarii | Nu | Da (#) |
| Indentare semnificativă | Nu | Da |
| Viteză de parsing | Rapidă | Mai lentă |
| Tipuri bogate (dată, binar) | Nu | Da |
| Anchors / alias | Nu | Da |
| Caz de utilizare tipic | API, stocare, schimb de date | Configurație, infra-as-code |
Cazuri de utilizare tipice
Alege JSON când
- Concepi un API REST sau un endpoint webhook
- Stochezi date într-o bază NoSQL sau un cache
- Schimbi date între frontend și backend
- Performanța de parsing este critică (debit ridicat, edge)
- Vrei un format suportat universal fără dependență
Alege YAML când
- Scrii o configurație aplicativă editată manual
- Ai nevoie de comentarii pentru a documenta opțiunile
- Scrii Kubernetes, Docker Compose, GitHub Actions, Ansible
- Vrei să factorizezi blocuri cu ancore și alias-uri
- Lizibilitatea primează asupra rapidității de procesare
Recomandare
Regula simplă: JSON pentru mașină, YAML pentru om. Dacă fișierul tău este produs sau consumat de un program, ia JSON. Dacă este scris și recitit manual, ia YAML. Multe ecosisteme acceptă pe ambele: Symfony citește YAML, JSON și XML pentru configurațiile sale, Kubernetes acceptă pe ambele pentru manifest-urile sale. În caz de dubiu, pleacă pe YAML pentru configurarea umană și JSON pentru fluxurile automatizate.
Poți testa conversia de la un format la altul cu convertorul nostru JSON / YAML și formata rapid un document cu formatatorul JSON.
Întrebări frecvente
Este YAML mai lent decât JSON?
Da, în general, parsarea unui document YAML costă de mai multe ori mai mult CPU decât parsarea aceluiași document JSON, pentru că gramatica YAML este mai bogată (indentare, tag-uri, anchors). În practică, diferența este neglijabilă pentru fișiere de configurație. Devine sensibilă când parsezi zeci de mii de documente în buclă.
Se poate converti automat YAML în JSON?
Da: orice document YAML poate fi convertit în JSON fără pierdere dacă se evită tipurile YAML specifice (timestamp-uri, anchors). Inversul este și mai simplu, JSON fiind un subset al YAML 1.2. Convertorul nostru face ambele sensuri.
Acceptă JSON comentariile?
Nu, standardul JSON le interzice. Dialecte există (JSON5, JSONC) dar nu sunt suportate universal. Dacă ai nevoie de comentarii, ia YAML sau TOML.
De ce Kubernetes utilizează YAML și nu JSON?
Manifest-urile Kubernetes sunt scrise și recitite de oameni. YAML oferă comentarii, o sintaxă mai puțin zgomotoasă și posibilitatea de a factoriza prin anchors. API-ul Kubernetes acceptă și JSON, dar utilizarea idiomatică rămâne YAML.
Este YAML realmente un super-set al JSON?
Da din YAML 1.2: orice document JSON valid este un document YAML valid. Aceasta permite încorporarea de JSON într-un fișier YAML fără a-l modifica, ceea ce este practic pentru blocurile generate sau copiate-lipite.