Data

CSV, JSON og YAML

Tre formater bærer det meste af verdens strukturerede data. At konvertere mellem dem er let; at gøre det uden stiltiende at ødelægge noget kræver lidt omhu.

Udgivet

Hvad hvert format bruges til

CSV er en tabel: rækker og kolonner, intet andet. Den kan læses overalt, er ubetydeligt lille og kan ikke udtrykke noget indlejret. JSON er et træ – objekter i arrays i objekter – og er det, næsten alle web-API'er taler. YAML udtrykker de samme strukturer som JSON, men med indrykning i stedet for klammer, hvilket gør det langt behageligere for mennesker at læse og redigere, og er grunden til, at konfigurationsfiler er drevet hen imod det.

Fælden med typetvang

Det er den, der faktisk koster folk penge. En CSV indeholder kun tekst – der er ingen måde at markere en værdi som tal, dato eller streng. Så konvertere gætter, og gættene er ofte forkerte:

  • Et postnummer som 01234 bliver til tallet 1234 og mister det indledende nul.
  • En varekode som 1-2 bliver til en dato.
  • Et langt kontonummer bliver til et flydende tal og mister de sidste cifre.
  • NA, der betyder Nordamerika, bliver til »ikke tilgængelig«.

Hver eneste af dem sker i det skjulte. Derfor bør en omhyggelig konvertering fra CSV til JSON lade alle værdier forblive strenge og overlade beslutningen til dig – hvilket dette websteds konverter bevidst gør, selvom det ved første øjekast virker pedantisk.

Hvad der ikke overlever turen til CSV

Indlejring. Et JSON-array af flade objekter bliver til en ren tabel. Så snart en værdi selv er et objekt eller et array, er der ingen kolonne at lægge den i. Mulighederne er at flade ud med sammensatte nøgler, at serialisere den indlejrede del tilbage til tekst i cellen eller at droppe den – og at droppe den i det skjulte er det værste af de tre. At skrive den tilbage som JSON-tekst i cellen bevarer i det mindste dataene, så de kan genskabes.

YAML's skarpe kanter

YAML er behageligt at læse og usædvanligt let at gøre forkert.

  • Indrykning er struktur, og tabulatorer er ikke tilladt. Et forkert placeret mellemrum ændrer betydningen i stedet for at give en fejl.
  • Nogle bare ord er booleans. I ældre YAML parses y, n, on, off, yes og no alle som sand eller falsk – så en landekolonne med NO for Norge bliver til false. Sæt dem i anførselstegn.
  • Kommentarer forsvinder ved konvertering til JSON, fordi JSON ikke har nogen måde at repræsentere dem på.

Rundtur er ikke garanteret

Konvertering af JSON til YAML og tilbage giver som regel det, du startede med. Konvertering af CSV til JSON og tilbage gør normalt ikke: anførselstegnsstil, kolonnerækkefølge for poster med forskellig form og repræsentationen af tomme værdier er alle valg, og forskellige værktøjer vælger forskelligt. Hvis en rundtur skal være nøjagtig, så kontrollér den i stedet for at antage det.

Sådan flytter du mellem dem: konverter CSV til JSON, konverter JSON til CSV eller konverter JSON til YAML – og kontrollér resultatet, da en rundtur ikke altid er nøjagtig.