Dati

CSV, JSON e YAML

Tre formati trasportano la maggior parte dei dati strutturati del mondo. Convertire dall'uno all'altro è facile; convertirli senza corrompere silenziosamente qualcosa richiede un po' di attenzione.

Pubblicato il

A cosa serve ciascuno

CSV è una tabella: righe e colonne, nient'altro. È leggibile ovunque, piccolissimo e non può esprimere nulla di annidato. JSON è un albero — oggetti dentro array dentro oggetti — ed è ciò che parla quasi ogni API web. YAML esprime le stesse strutture di JSON ma usando l'indentazione invece delle parentesi graffe, il che lo rende molto più piacevole da leggere e modificare per le persone, ed è il motivo per cui i file di configurazione si sono orientati verso di esso.

La trappola della coercizione di tipo

Questa è quella che fa davvero perdere soldi alle persone. Un CSV contiene solo testo — non c'è modo di indicare che un valore è un numero, una data o una stringa. Quindi i convertitori tirano a indovinare, e le ipotesi sono spesso sbagliate:

  • Un CAP come 01234 diventa il numero 1234, perdendo lo zero iniziale.
  • Un codice prodotto come 1-2 diventa una data.
  • Un lungo numero di conto diventa a virgola mobile e perde le ultime cifre.
  • NA, che indica il Nord America, diventa “non disponibile”.

Ognuna di queste avviene in silenzio. Ecco perché una conversione accurata da CSV a JSON dovrebbe lasciare ogni valore come stringa e lasciare a te la decisione — che è ciò che fa di proposito il convertitore di questo sito, anche se all'inizio sembra pedante.

Cosa non sopravvive al passaggio a CSV

L'annidamento. Un array JSON di oggetti piatti diventa una tabella pulita. Nel momento in cui un valore è a sua volta un oggetto o un array, non c'è una colonna in cui metterlo. Le opzioni sono appiattire con chiavi composte, serializzare la parte annidata di nuovo come testo dentro la sua cella, oppure scartarla — e scartarla in silenzio è la peggiore delle tre. Riscriverla come testo JSON dentro la cella almeno mantiene i dati recuperabili.

Gli spigoli vivi di YAML

YAML è piacevole da leggere e insolitamente facile da sbagliare.

  • L'indentazione è struttura, e le tabulazioni non sono ammesse. Uno spazio fuori posto cambia il significato invece di causare un errore.
  • Alcune parole nude sono booleani. Nelle versioni più vecchie di YAML, y, n, on, off, yes e no vengono tutte interpretate come vero o falso — quindi una colonna di Paesi che contiene NO per la Norvegia diventa false. Mettile tra virgolette.
  • I commenti spariscono nella conversione in JSON, perché JSON non ha modo di rappresentarli.

Il ritorno allo stato iniziale non è garantito

Convertire JSON in YAML e ritorno di solito restituisce ciò da cui sei partito. Convertire CSV in JSON e ritorno di solito no: lo stile delle virgolette, l'ordine delle colonne per record con forme diverse e la rappresentazione dei valori vuoti sono tutte scelte, e strumenti diversi scelgono in modo diverso. Se un'andata e ritorno deve essere esatta, verificala invece di darla per scontata.

Per passare dall'uno all'altro: converti CSV in JSON, converti JSON in CSV oppure converti JSON in YAML — e controlla il risultato, perché l'andata e ritorno non è sempre esatta.