CSV, JSON en YAML
Drie formaten dragen het grootste deel van de gestructureerde gegevens ter wereld. Ertussen converteren is makkelijk; converteren zonder stilletjes iets te beschadigen vraagt wat zorg.
Gepubliceerd
Waar elk voor dient
CSV is een tabel: rijen en kolommen, verder niets. Het is universeel leesbaar, piepklein en kan niets geneste uitdrukken. JSON is een boom, met objecten in arrays in objecten, en is wat bijna elke web-API spreekt. YAML drukt dezelfde structuren uit als JSON maar met inspringing in plaats van accolades, wat het veel prettiger maakt om te lezen en te bewerken voor mensen, en de reden is dat configuratiebestanden ernaar zijn opgeschoven.
De valkuil van typeconversie
Dit is de valkuil die mensen echt geld kost. Een CSV bevat alleen tekst: er is geen manier om een waarde als getal, datum of tekenreeks te markeren. Converters gokken dus, en die gokken zijn vaak fout:
- Een postcode als
01234wordt het getal1234, waarbij de voorloopnul verloren gaat. - Een productcode als
1-2wordt een datum. - Een lang rekeningnummer wordt een drijvendekommagetal en verliest zijn laatste cijfers.
NA, wat Noord-Amerika betekent, wordt “niet beschikbaar”.
Elk daarvan gebeurt stilletjes. Daarom hoort een zorgvuldige CSV-naar-JSON-conversie elke waarde als tekenreeks te laten en jou laten beslissen, en dat is wat de converter van deze site bewust doet, ook al lijkt het eerst pietluttig.
Wat de reis naar CSV niet overleeft
Nesting. Een JSON-array van platte objecten wordt een nette tabel. Zodra een waarde zelf een object of array is, is er geen kolom meer om hem in te zetten. De opties zijn afvlakken met samengestelde sleutels, het geneste deel terug serialiseren naar tekst binnen zijn cel, of het weglaten, en het stilletjes weglaten is de slechtste van de drie. Het terugschrijven als JSON-tekst in de cel houdt de gegevens in elk geval herstelbaar.
De scherpe kanten van YAML
YAML is prettig om te lezen en ongewoon makkelijk om fout te doen.
- Inspringing is structuur, en tabs zijn niet toegestaan. Een verkeerd geplaatste spatie verandert de betekenis in plaats van een fout te geven.
- Sommige kale woorden zijn booleans. In oudere YAML worden
y,n,on,off,yesennoallemaal als waar of onwaar geparseerd, dus een kolom met landen waarinNOvoor Noorwegen staat, wordtfalse. Zet ze tussen aanhalingstekens. - Opmerkingen verdwijnen bij conversie naar JSON, omdat JSON ze niet kan weergeven.
Heen en weer converteren is niet gegarandeerd
JSON naar YAML en terug converteren levert meestal op waarmee je begon. CSV naar JSON en terug meestal niet: aanhalingsstijl, kolomvolgorde bij records met verschillende vormen en de weergave van lege waarden zijn allemaal keuzes, en verschillende tools kiezen verschillend. Als een rondje exact moet zijn, controleer het dan in plaats van het aan te nemen.
Om ertussen te wisselen: converteer CSV naar JSON, converteer JSON naar CSV of converteer JSON naar YAML, en controleer het resultaat, want heen en weer converteren is niet altijd exact.