Un inginer DevOps exportă o configurație Kubernetes ca YAML, dar trebuie să o trimită unui API care acceptă doar JSON. Un analist primește date de răspuns API în JSON, dar le are nevoie într-un spreadsheet. Un data scientist exportă un CSV din bază de date, dar are nevoie de JSON structurat pentru un dashboard web.
Conversia formatelor nu este doar o operațiune mecanică. Fiecare format face compromisuri diferite, iar înțelegerea a ce se pierde în traducere este la fel de importantă ca știința de a converti.
Trei formate, trei filozofii
Fiecare format a fost proiectat pentru un public diferit și o problemă diferită:
| Format | Apărut | Proiectat pentru | Filozofia de bază |
|---|---|---|---|
| CSV | ~1972 | Schimb de date între programe | Simplitate maximă — doar rânduri și coloane |
| JSON | 2001 | Schimb de date web | Date structurate lizibile de mașini cu reguli stricte |
| YAML | 2001 | Fișiere de configurare | Date structurate lizibile de oameni cu sintaxă minimală |
CSV presupune că datele tale sunt un tabel plat. Fiecare valoare este un string. Nu există concept de imbricare, tipuri sau metadate.
JSON presupune că datele tale au structură — obiecte, array-uri, tipuri (string-uri, numere, booleani, null). Este strict și neambiguu, ceea ce îl face ideal pentru mașini dar verbos pentru oameni.
YAML presupune că un om va citi și edita fișierul. Folosește indentarea în loc de acolade, suportă comentarii și are o sintaxă mai relaxată. Tehnic, YAML este un superset al JSON — orice document JSON valid este și YAML valid.
YAML este un superset al JSON Poți lipi un document JSON direct într-un parser YAML și va funcționa. Inversul nu este adevărat — funcționalitățile YAML precum comentariile, ancorele și string-urile multi-linie nu au echivalent în JSON.
Scenarii reale de conversie
Migrare configurație (JSON la YAML, YAML la JSON)
Aceasta este cea mai frecventă conversie. Diferite instrumente așteaptă diferite formate de configurare:
- Docker Compose, Kubernetes, GitHub Actions, Ansible folosesc YAML
- package.json, tsconfig.json, ESLint folosesc JSON
- Migrarea între instrumente înseamnă adesea convertirea configurațiilor
Această conversie este fără pierderi în ambele direcții pentru conținutul datelor — dar comentariile YAML se pierd la conversia în JSON, deoarece JSON nu are sintaxă de comentarii.
Analiză date (JSON la CSV)
Răspunsurile API vin în JSON. Analiștii au nevoie de spreadsheet-uri. Această conversie funcționează bine pentru array-uri JSON plate — array-urile de obiecte cu chei identice se mapează natural pe rânduri și coloane.
Dar eșuează cu date imbricate. Un obiect JSON cu un câmp address.city și un array skills nu are o reprezentare CSV naturală. Convertorul trebuie să aleagă: aplatizarea cheilor imbricate (address.city devine o coloană), serializarea valorilor imbricate ca string-uri sau eliminarea lor.
Import date (CSV la JSON)
Scenariul invers: importul datelor din spreadsheet într-o aplicație web sau API. Conversia CSV la JSON creează un array de obiecte, cu antetele coloanelor ca chei. Problema este că CSV nu are informații despre tipuri — numărul 42, string-ul "42" și booleanul true sunt toate doar text în CSV. Convertorul trebuie să ghicească tipurile.
Lizibilitate (JSON la YAML)
Uneori trebuie doar să faci un fișier de configurare JSON dens lizibil. Conversia la YAML oferă indentare curată și posibilitatea de a adăuga comentarii pentru documentație. Aceasta este deosebit de valoroasă pentru fișiere de configurare mari întreținute de o echipă.
Ce se pierde la conversie
Aceasta este cunoașterea critică care economisește timp de depanare:
| Conversie | Ce se pierde |
|---|---|
| YAML la JSON | Comentariile (JSON nu are sintaxă de comentarii) |
| JSON la CSV | Imbricarea (CSV este plat), tipurile (totul devine text), array-urile |
| CSV la JSON | Nimic (dar tipurile trebuie deduse — "42" vs 42) |
| CSV la YAML | Nimic (aceeași problemă de deducere a tipurilor) |
| JSON la YAML | Nimic (YAML este un superset al JSON) |
| YAML la CSV | Comentariile, imbricarea, tipurile, ancorele/aliasurile |
Modelul este clar: conversiile spre CSV pierd cele mai multe informații, deoarece CSV este cel mai simplu format. Conversiile între JSON și YAML sunt aproape fără pierderi. Iar comentariile YAML se pierd întotdeauna la părăsirea YAML.
Bidirecțional vs. unidirecțional JSON-la-YAML și YAML-la-JSON sunt efectiv bidirecționale (sigure pentru dus-întors, cu excepția comentariilor). JSON-la-CSV și YAML-la-CSV sunt unidirecționale pentru date complexe — nu poți reconstrui imbricarea dintr-un CSV plat.
Capcane frecvente la conversie
Capcanele de coerciție a tipurilor în YAML
YAML interpretează automat anumite string-uri ca tipuri non-string. Cuvântul no devine boolean false. Cuvântul yes devine true. String-ul 1.0 devine un float. Codurile de țară precum NO (Norvegia) au cauzat celebre bug-uri. Întotdeauna pune între ghilimele valorile ambigue în YAML.
Confuzia delimitatorului și codificării CSV
Nu toate CSV-urile folosesc virgule. CSV-urile europene folosesc adesea punct și virgulă (deoarece virgulele sunt separatoare zecimale în multe formate numerice europene). Valorile separate prin tab (TSV) sunt o altă variantă. Iar neconcordanțele de codificare a caracterelor (UTF-8 vs Latin-1) produc caractere accentuate distorsionate.
Problema virgulei finale în JSON
JSON nu permite virgule finale. Aceasta este JavaScript valid: {"a": 1, "b": 2,} — dar este JSON invalid. O singură virgulă finală cauzează o eroare de parsare.
Performanță pentru seturi mari de date
Pentru seturi de date cu milioane de rânduri, CSV este semnificativ mai eficient decât JSON sau YAML. JSON adaugă acolade, paranteze pătrate și ghilimele pentru fiecare valoare. Un CSV cu 1 milion de rânduri ar putea fi de 50 MB; JSON-ul echivalent ar putea fi de 150 MB.
Alegerea formatului corect de la început
În loc să convertești ulterior, alegerea formatului corect de la început previne pierderea informațiilor:
- Date tabelare pentru spreadsheet-uri sau baze de date — CSV
- Date structurate pentru API-uri sau aplicații web — JSON
- Configurare pe care oamenii o vor edita — YAML
- Date imbricate complexe cu comentarii — YAML
- Schimb de date între sisteme — JSON
Află mai multe
Convertește între JSON, YAML și CSV instantaneu cu instrumente din browser:
- Convertește formate de date — lipește datele, alege formatul țintă, descarcă rezultatul
- Formator JSON — validează, formatează și minifică JSON
- Convertor JSON la CSV — convertește array-uri JSON în CSV gata de spreadsheet
- Convertor YAML-JSON — convertește între YAML și JSON cu conștientizarea comentariilor
