CSV, JSON og YAML
Tre formater bærer mesteparten av verdens strukturerte data. Å konvertere mellom dem er enkelt; å konvertere mellom dem uten å stille ødelegge noe krever litt omtanke.
Publisert
Hva hver av dem er til for
CSV er en tabell: rader og kolonner, ingenting annet. Den kan leses overalt, er svært liten, og kan ikke uttrykke noe nøstet. JSON er et tre – objekter inni tabeller inni objekter – og er det nesten alle web-API-er snakker. YAML uttrykker de samme strukturene som JSON, men bruker innrykk i stedet for klammer, noe som gjør det langt triveligere for mennesker å lese og redigere, og er grunnen til at konfigurasjonsfiler har drevet mot det.
Typetvangsfellen
Dette er den som faktisk koster folk penger. En CSV inneholder bare tekst – det finnes ingen måte å merke en verdi som tall, dato eller streng. Så konverterere gjetter, og gjetningene er ofte feil:
- Et postnummer som
01234blir tallet1234og mister det innledende nullet. - En produktkode som
1-2blir en dato. - Et langt kontonummer blir flyttall og mister de siste sifrene.
NA, som betyr Nord-Amerika, blir «ikke tilgjengelig».
Hver eneste av disse skjer i det stille. Derfor bør en nøye CSV-til-JSON-konvertering la hver verdi forbli en streng og la deg bestemme – noe konvertereren på dette nettstedet bevisst gjør, selv om det ser pedantisk ut ved første øyekast.
Hva som ikke overlever turen til CSV
Nøsting. En JSON-tabell med flate objekter blir en ryddig tabell. I det øyeblikket en verdi selv er et objekt eller en tabell, finnes det ingen kolonne å putte den i. Alternativene er å flate ut med sammensatte nøkler, å serialisere den nøstede delen tilbake til tekst inne i cellen, eller å droppe den – og å droppe den i det stille er det verste av de tre. Å skrive den tilbake som JSON-tekst i cellen holder i det minste dataene gjenopprettelige.
YAMLs skarpe kanter
YAML er behagelig å lese og uvanlig lett å gjøre feil i.
- Innrykk er struktur, og tabulatorer er ikke tillatt. Et feilplassert mellomrom endrer betydningen i stedet for å gi en feil.
- Noen bare ord er boolske verdier. I eldre YAML tolkes
y,n,on,off,yesognoalle som sann eller usann – så en landkolonne som inneholderNOfor Norge blirfalse. Sett dem i anførselstegn. - Kommentarer forsvinner ved konvertering til JSON, fordi JSON ikke har noen måte å representere dem på.
Rundtur er ikke garantert
Å konvertere JSON til YAML og tilbake gir vanligvis det du startet med. Å konvertere CSV til JSON og tilbake gjør vanligvis ikke det: sitatstil, kolonnerekkefølge for poster med ulik form og representasjonen av tomme verdier er alle valg, og ulike verktøy velger ulikt. Hvis en rundtur må være nøyaktig, verifiser den i stedet for å anta.
For å gå mellom dem: konverter CSV til JSON, konverter JSON til CSV eller konverter JSON til YAML – og sjekk resultatet, siden en rundtur ikke alltid blir nøyaktig.