Data

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 01234 blir tallet 1234 og mister det innledende nullet.
  • En produktkode som 1-2 blir 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, yes og no alle som sann eller usann – så en landkolonne som inneholder NO for Norge blir false. 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.