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
01234bliver til tallet1234og mister det indledende nul. - En varekode som
1-2bliver 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,yesognoalle som sand eller falsk – så en landekolonne medNOfor Norge bliver tilfalse. 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.