Data

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 01234 wordt het getal 1234, waarbij de voorloopnul verloren gaat.
  • Een productcode als 1-2 wordt 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, yes en no allemaal als waar of onwaar geparseerd, dus een kolom met landen waarin NO voor Noorwegen staat, wordt false. 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.