Un ingegnere DevOps esporta una configurazione Kubernetes come YAML ma deve inviarla a un'API che accetta solo JSON. Un analista riceve dati di risposta API in JSON ma li vuole in un foglio di calcolo. Un data scientist esporta un CSV da un database ma ha bisogno di JSON strutturato per una dashboard web.
La conversione di formato non è solo un'operazione meccanica. Ogni formato fa compromessi diversi, e capire cosa si perde nella conversione è importante quanto sapere come convertire.
Tre formati, tre filosofie
Ogni formato è stato progettato per un pubblico e un problema diverso:
| Formato | Nascita | Progettato per | Filosofia di base |
|---|---|---|---|
| CSV | ~1972 | Scambio dati tra programmi | Massima semplicità — solo righe e colonne |
| JSON | 2001 | Scambio dati web | Dati strutturati leggibili dalle macchine con regole rigide |
| YAML | 2001 | File di configurazione | Dati strutturati leggibili dall'uomo con sintassi minima |
CSV presuppone che i tuoi dati siano una tabella piatta. Ogni valore è una stringa. Non esiste il concetto di annidamento, tipizzazione o metadati.
JSON presuppone che i tuoi dati abbiano struttura — oggetti, array, tipi (stringhe, numeri, booleani, null). È rigoroso e inequivocabile, il che lo rende ideale per le macchine ma prolisso per gli umani.
YAML presuppone che un umano leggerà e modificherà il file. Usa l'indentazione al posto delle parentesi graffe, supporta i commenti e ha una sintassi più rilassata. Tecnicamente, YAML è un sovrainsieme di JSON — qualsiasi documento JSON valido è anche YAML valido.
YAML è un sovrainsieme di JSON Puoi incollare un documento JSON direttamente in un parser YAML e funzionerà. Il contrario non è vero — funzionalità YAML come commenti, ancore e stringhe multilinea non hanno equivalente in JSON.
Scenari di conversione reali
Migrazione della configurazione (JSON a YAML, YAML a JSON)
Questa è la conversione più comune. Diversi strumenti si aspettano diversi formati di configurazione:
- Docker Compose, Kubernetes, GitHub Actions, Ansible usano YAML
- package.json, tsconfig.json, ESLint usano JSON
- Migrare tra strumenti spesso significa convertire configurazioni
Questa conversione è senza perdita in entrambe le direzioni per il contenuto dei dati — ma i commenti YAML si perdono nella conversione a JSON, poiché JSON non ha sintassi per i commenti.
Analisi dati (JSON a CSV)
Le risposte API arrivano in JSON. Gli analisti hanno bisogno di fogli di calcolo. Questa conversione funziona bene per array JSON piatti — array di oggetti con chiavi identiche si mappano naturalmente a righe e colonne.
Ma fallisce con i dati annidati. Un oggetto JSON con un campo address.city e un array skills non ha una rappresentazione CSV naturale. Il convertitore deve scegliere: appiattire le chiavi annidate (address.city diventa una colonna), serializzare i valori annidati come stringhe o scartarli.
Importazione dati (CSV a JSON)
Lo scenario inverso: importare dati da foglio di calcolo in un'applicazione web o API. La conversione CSV a JSON crea un array di oggetti, con le intestazioni delle colonne come chiavi. Il problema è che il CSV non ha informazioni sui tipi — il numero 42, la stringa "42" e il booleano true sono tutti solo testo in CSV. Il convertitore deve indovinare i tipi.
Leggibilità umana (JSON a YAML)
A volte hai semplicemente bisogno di rendere leggibile un file di configurazione JSON denso. La conversione in YAML offre un'indentazione pulita e la possibilità di aggiungere commenti per la documentazione. Questo è particolarmente prezioso per file di configurazione grandi che saranno mantenuti da un team.
Cosa si perde nella conversione
Questa è la conoscenza critica che fa risparmiare tempo di debug:
| Conversione | Cosa si perde |
|---|---|
| YAML a JSON | Commenti (JSON non ha sintassi per i commenti) |
| JSON a CSV | Annidamento (CSV è piatto), tipi (tutto diventa testo), array |
| CSV a JSON | Nulla (ma i tipi devono essere inferiti — "42" vs 42) |
| CSV a YAML | Nulla (stesso problema di inferenza dei tipi) |
| JSON a YAML | Nulla (YAML è un sovrainsieme di JSON) |
| YAML a CSV | Commenti, annidamento, tipi, ancore/alias |
Lo schema è chiaro: le conversioni verso CSV perdono più informazioni, perché CSV è il formato più semplice. Le conversioni tra JSON e YAML sono quasi senza perdita. E i commenti YAML si perdono sempre quando si lascia YAML.
Bidirezionale vs. unidirezionale JSON-a-YAML e YAML-a-JSON sono effettivamente bidirezionali (andata e ritorno sicura, tranne per i commenti). JSON-a-CSV e YAML-a-CSV sono unidirezionali per dati complessi — non si può ricostruire l'annidamento da un CSV piatto.
Insidie comuni nella conversione
Le trappole di coercizione dei tipi di YAML
YAML interpreta automaticamente certe stringhe come tipi non-stringa. La parola no diventa booleano false. La parola yes diventa true. La stringa 1.0 diventa un float. Codici paese come NO (Norvegia) hanno notoriamente causato bug. Metti sempre tra virgolette i valori ambigui in YAML.
Confusione su delimitatori e codifica CSV
Non tutti i CSV usano virgole. I CSV europei usano spesso punti e virgola (perché le virgole sono separatori decimali in molti formati numerici europei). I valori separati da tabulazione (TSV) sono un'altra variante. E le incompatibilità di codifica dei caratteri (UTF-8 vs Latin-1) producono caratteri accentati illeggibili.
Il problema della virgola finale in JSON
JSON non consente virgole finali. Questo è JavaScript valido: {"a": 1, "b": 2,} — ma è JSON non valido. Una singola virgola finale causa un errore di parsing.
Prestazioni con grandi dataset
Per dataset con milioni di righe, CSV è significativamente più efficiente di JSON o YAML. JSON aggiunge parentesi graffe, quadre e virgolette per ogni valore. Un CSV con 1 milione di righe potrebbe essere 50 MB; il JSON equivalente potrebbe essere 150 MB.
Scegliere il formato giusto dall'inizio
Invece di convertire dopo, scegliere il formato giusto dall'inizio evita la perdita di informazioni:
- Dati tabulari per fogli di calcolo o database — CSV
- Dati strutturati per API o applicazioni web — JSON
- Configurazione che sarà modificata da umani — YAML
- Dati annidati complessi con commenti — YAML
- Scambio dati tra sistemi — JSON
Per approfondire
Converti tra JSON, YAML e CSV istantaneamente con strumenti basati sul browser:
- Convertire formati dati — incolla i tuoi dati, scegli il formato di destinazione, scarica il risultato
- JSON Formatter — validare, formattare e minificare JSON
- Convertitore JSON a CSV — convertire array JSON in CSV pronto per fogli di calcolo
- Convertitore YAML-JSON — convertire tra YAML e JSON con gestione dei commenti
