CSV, JSON och YAML
Tre format bär det mesta av världens strukturerade data. Att konvertera mellan dem är lätt; att konvertera mellan dem utan att tyst förstöra något kräver lite omsorg.
Publicerad
Vad vart och ett är till för
CSV är en tabell: rader och kolumner, inget annat. Det är universellt läsbart, mycket litet och kan inte uttrycka något nästlat. JSON är ett träd – objekt i arrayer i objekt – och är vad nästan varje webb-API talar. YAML uttrycker samma strukturer som JSON men med indrag i stället för klammerparenteser, vilket gör det mycket trevligare för människor att läsa och redigera, och är därför konfigurationsfiler har glidit mot det.
Fällan med typtvång
Det här är det som faktiskt kostar folk pengar. En CSV innehåller bara text – det finns inget sätt att markera ett värde som ett tal, ett datum eller en sträng. Så konverterare gissar, och gissningarna blir ofta fel:
- Ett postnummer som
01234blir talet1234och förlorar den inledande nollan. - En produktkod som
1-2blir ett datum. - Ett långt kontonummer blir flyttal och förlorar sina sista siffror.
NA, som betyder Nordamerika, blir ”not available”.
Vart och ett av dessa sker tyst. Det är därför en noggrann konvertering från CSV till JSON bör lämna varje värde som en sträng och låta dig bestämma – vilket den här webbplatsens konverterare medvetet gör, även om det ser pedantiskt ut först.
Vad som inte överlever resan till CSV
Nästling. En JSON-array av platta objekt blir en ren tabell. I samma stund som ett värde självt är ett objekt eller en array finns det ingen kolumn att lägga det i. Alternativen är att platta ut med sammansatta nycklar, att serialisera den nästlade delen tillbaka till text i cellen, eller att släppa den – och att släppa den tyst är det sämsta av de tre. Att skriva tillbaka den som JSON-text i cellen gör åtminstone att data går att återskapa.
YAML:s vassa kanter
YAML är trevligt att läsa och ovanligt lätt att få fel.
- Indrag är struktur, och tabbtecken är inte tillåtna. Ett felplacerat blanksteg ändrar innebörden i stället för att ge ett fel.
- Vissa nakna ord är booleska värden. I äldre YAML tolkas
y,n,on,off,yesochnoalla som sant eller falskt – så en landskolumn som innehållerNOför Norge blirfalse. Sätt dem inom citattecken. - Kommentarer försvinner vid konvertering till JSON, eftersom JSON inte kan representera dem.
Rundturer är inte garanterade
Att konvertera JSON till YAML och tillbaka ger oftast det du började med. Att konvertera CSV till JSON och tillbaka gör det oftast inte: citatstil, kolumnordning för poster med olika form och hur tomma värden representeras är alla val, och olika verktyg väljer olika. Om en rundtur måste vara exakt, verifiera den i stället för att anta.
För att växla mellan dem: konvertera CSV till JSON, konvertera JSON till CSV eller konvertera JSON till YAML – och kontrollera resultatet, eftersom rundturer inte alltid är exakta.