Een DevOps-engineer exporteert een Kubernetes-configuratie als YAML maar moet deze naar een API sturen die alleen JSON accepteert. Een analist ontvangt API-responsgegevens in JSON maar heeft ze nodig in een spreadsheet. Een data scientist exporteert een CSV uit een database maar heeft gestructureerde JSON nodig voor een webdashboard.
Formaatconversie is niet slechts een mechanische operatie. Elk formaat maakt andere afwegingen, en begrijpen wat er verloren gaat bij conversie is net zo belangrijk als weten hoe je converteert.
Drie formaten, drie filosofieën
Elk formaat is ontworpen voor een ander publiek en een ander probleem:
| Formaat | Ontstaan | Ontworpen voor | Kernfilosofie |
|---|---|---|---|
| CSV | ~1972 | Data-uitwisseling tussen programma's | Maximale eenvoud — alleen rijen en kolommen |
| JSON | 2001 | Webdata-uitwisseling | Machineleesbare gestructureerde data met strikte regels |
| YAML | 2001 | Configuratiebestanden | Mensleesbare gestructureerde data met minimale syntax |
CSV gaat ervan uit dat je data een platte tabel is. Elke waarde is een string. Er is geen concept van nesting, typen of metadata.
JSON gaat ervan uit dat je data structuur heeft — objecten, arrays, typen (strings, getallen, booleans, null). Het is strikt en ondubbelzinnig, wat het ideaal maakt voor machines maar omslachtig voor mensen.
YAML gaat ervan uit dat een mens het bestand zal lezen en bewerken. Het gebruikt inspringing in plaats van accolades, ondersteunt commentaren en heeft een meer ontspannen syntax. Technisch gezien is YAML een superset van JSON — elk geldig JSON-document is ook geldige YAML.
YAML is een superset van JSON Je kunt een JSON-document rechtstreeks in een YAML-parser plakken en het werkt. Het omgekeerde is niet waar — YAML-functies zoals commentaren, ankers en meerregelige strings hebben geen JSON-equivalent.
Praktijkscenario's voor conversie
Configuratiemigratie (JSON naar YAML, YAML naar JSON)
Dit is de meest voorkomende conversie. Verschillende tools verwachten verschillende configuratieformaten:
- Docker Compose, Kubernetes, GitHub Actions, Ansible gebruiken YAML
- package.json, tsconfig.json, ESLint gebruiken JSON
- Migreren tussen tools betekent vaak configuraties converteren
Deze conversie is verliesvrij in beide richtingen voor data-inhoud — maar YAML-commentaren gaan verloren bij conversie naar JSON, aangezien JSON geen commentaarsyntax heeft.
Data-analyse (JSON naar CSV)
API-responsen komen in JSON. Analisten hebben spreadsheets nodig. Deze conversie werkt goed voor platte JSON-arrays — arrays van objecten met identieke sleutels worden op natuurlijke wijze rijen en kolommen.
Maar het loopt spaak bij geneste data. Een JSON-object met een address.city-veld en een skills-array heeft geen natuurlijke CSV-representatie. De converter moet kiezen: geneste sleutels platslaan (address.city wordt een kolom), geneste waarden als strings serialiseren, of ze weggooien.
Data-import (CSV naar JSON)
Het omgekeerde scenario: spreadsheetgegevens importeren in een webapplicatie of API. CSV naar JSON-conversie creëert een array van objecten, met kolomkoppen als sleutels. Het probleem is dat CSV geen type-informatie heeft — het getal 42, de string "42" en de boolean true zijn allemaal gewoon tekst in CSV. De converter moet typen raden.
Leesbaarheid (JSON naar YAML)
Soms moet je gewoon een compacte JSON-configuratie leesbaar maken. Converteren naar YAML geeft je nette inspringing en de mogelijkheid om commentaren toe te voegen voor documentatie. Dit is vooral waardevol voor grote configuratiebestanden die door een team worden onderhouden.
Wat er verloren gaat bij conversie
Dit is de cruciale kennis die debugtijd bespaart:
| Conversie | Wat er verloren gaat |
|---|---|
| YAML naar JSON | Commentaren (JSON heeft geen commentaarsyntax) |
| JSON naar CSV | Nesting (CSV is plat), typen (alles wordt tekst), arrays |
| CSV naar JSON | Niets (maar typen moeten worden afgeleid — "42" vs 42) |
| CSV naar YAML | Niets (zelfde type-afleidingsprobleem) |
| JSON naar YAML | Niets (YAML is een superset van JSON) |
| YAML naar CSV | Commentaren, nesting, typen, ankers/aliassen |
Het patroon is duidelijk: conversies richting CSV verliezen de meeste informatie, omdat CSV het eenvoudigste formaat is. Conversies tussen JSON en YAML zijn nagenoeg verliesvrij. En YAML-commentaren gaan altijd verloren bij het verlaten van YAML.
Bidirectioneel vs. eenrichting JSON-naar-YAML en YAML-naar-JSON zijn effectief bidirectioneel (round-trip veilig, behalve voor commentaren). JSON-naar-CSV en YAML-naar-CSV zijn eenrichting voor complexe data — je kunt nesting niet reconstrueren uit een platte CSV.
Veelvoorkomende valkuilen bij conversie
YAML's typecoercievallen
YAML interpreteert bepaalde strings automatisch als niet-stringtypen. Het woord no wordt boolean false. Het woord yes wordt true. De string 1.0 wordt een float. Landcodes zoals NO (Noorwegen) hebben berucht bugs veroorzaakt. Zet twijfelachtige waarden altijd tussen aanhalingstekens in YAML.
CSV-scheidingsteken- en coderingsverwarring
Niet alle CSV's gebruiken komma's. Europese CSV's gebruiken vaak puntkomma's (omdat komma's decimaaltekens zijn in veel Europese getalnotaties). Tab-gescheiden waarden (TSV) zijn een andere variant. En tekencoderingsmismatches (UTF-8 vs Latin-1) produceren verknoeid weergegeven geaccentueerde tekens.
JSON's trailing comma-probleem
JSON staat geen trailing comma's toe. Dit is geldig JavaScript: {"a": 1, "b": 2,} — maar het is ongeldige JSON. Een enkele trailing comma veroorzaakt een parseerfout.
Prestaties bij grote datasets
Voor datasets met miljoenen rijen is CSV aanzienlijk efficiënter dan JSON of YAML. JSON voegt accolades, haken en aanhalingstekens toe voor elke waarde. Een CSV met 1 miljoen rijen kan 50 MB zijn; de equivalente JSON zou 150 MB kunnen zijn.
Het juiste formaat kiezen vanaf het begin
In plaats van achteraf te converteren, voorkomt het vooraf kiezen van het juiste formaat informatieverlies:
- Tabelgegevens voor spreadsheets of databases — CSV
- Gestructureerde data voor API's of webapps — JSON
- Configuratie die mensen zullen bewerken — YAML
- Complexe geneste data met commentaren — YAML
- Data-uitwisseling tussen systemen — JSON
Verder lezen
Converteer direct tussen JSON, YAML en CSV met browsergebaseerde tools:
- Dataformaten converteren — plak je data, kies het doelformaat, download het resultaat
- JSON Formatter — valideer, formatteer en minificeer JSON
- JSON naar CSV Converter — converteer JSON-arrays naar spreadsheet-klare CSV
- YAML-JSON Converter — converteer tussen YAML en JSON met commentaarbewustzijn
