JSON vs YAML: verschillen en gebruiksgevallen
JSON en YAML zijn de twee meest gebruikte tekstuele serialisatieformaten om gestructureerde data te beschrijven: applicatieconfiguratie, API-payloads, infrastructuurbestanden, Kubernetes-manifests, CI/CD-pipelines. Beide vertegenwoordigen dezelfde fundamentele structuren (objecten, lijsten, scalairen) maar met een verschillende filosofie: JSON geeft voorrang aan machine-leesbaarheid en universaliteit, YAML zet in op leesbaarheid voor mensen en op beknoptheid. Dit artikel vergelijkt beide formaten punt voor punt om je te helpen kiezen.
Wat is JSON?
JSON (JavaScript Object Notation) is een serialisatieformaat geïntroduceerd door Douglas Crockford in het begin van de jaren 2000, afgeleid van de literal-objectsyntaxis van JavaScript. Gestandaardiseerd in RFC 8259 en ECMA-404, is het vandaag het centrale formaat van het web: vrijwel alle REST-API's, NoSQL- databases en frontendconfiguraties gebruiken het.
JSON berust op twee structuren:
- Een geordende verzameling van sleutel-waardeparen (het object, tussen accolades)
- Een geordende lijst van waarden (het array, tussen vierkante haken)
De scalaire waarden zijn string, number, true,
false of null. Strings moeten verplicht tussen dubbele aanhalingstekens
staan. JSON ondersteunt geen commentaar.
Wat is YAML?
YAML (YAML Ain't Markup Language) is een formaat dat in 2001 verscheen, vanaf het begin ontworpen om door mensen leesbaar te zijn. De huidige specificatie is YAML 1.2.2. Zijn onderscheidende kenmerk: het gebruikt inspringing om de hiërarchie uit te drukken, op de manier van Python.
YAML is sinds versie 1.2 een superset van JSON: elk geldig JSON-document is een geldig YAML-
document. Maar YAML voegt veel toe: commentaar, strings zonder aanhalingstekens, meerregelige
strings, anchors en aliassen, tags voor expliciete typering, meerdere documenten in hetzelfde
bestand (---).
Vergelijking van de syntaxis
Hier is dezelfde structuur uitgedrukt in beide formaten.
JSON
{
"name": "cdrn",
"version": "1.14",
"tags": ["seo", "tools", "open-source"],
"author": {
"name": "Adrien",
"email": "contact@example.com"
},
"active": true,
"stars": null
}
YAML
# Projectconfiguratie
name: cdrn
version: "1.14"
tags:
- seo
- tools
- open-source
author:
name: Adrien
email: contact@example.com
active: true
stars: null
Voor dezelfde inhoud neemt YAML ongeveer evenveel regels in beslag maar vermijdt het accolades,
vierkante haken, afsluitende komma's en aanhalingstekens rond de meeste strings. Commentaar (regels
met #) is toegestaan.
Ondersteunde types
JSON kent 6 types: object, array, string,
number, boolean, null. Geen native datum, geen binaire data,
geen expliciet onderscheid tussen geheel getal en floating point.
YAML 1.2 kent dezelfde als JSON en voegt toe: ISO 8601-timestamps, binaire data (gecodeerd in
base64 via de tag !!binary), aparte integers en floats, oneindig, NaN, en aangepaste
types via tags (!!str, !!int, !!float...). YAML 1.1 aanvaardde
yes/no/on/off als booleans: een klassieke valkuil op oudere parsers.
Prestaties en ecosysteem
JSON is doorgaans 3 tot 10 keer sneller te parsen dan YAML, en zijn parsers zijn overal beschikbaar (geïntegreerd in de runtime van vrijwel alle talen). YAML-bibliotheken zijn zwaarder omdat ze een rijkere grammatica beheren (anchors, tags, multi-doc).
Aan ecosysteemkant: JSON domineert HTTP-API's, NoSQL-databases (MongoDB, CouchDB), de bestanden
package.json, composer.json, tsconfig.json. YAML heeft zich
opgeworpen voor applicatieconfiguratie en infrastructure-as-code: Symfony, Spring Boot, Rails,
Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Vergelijkingstabel
| Criterium | JSON | YAML |
|---|---|---|
| Leesbaarheid voor mensen | Goed | Uitstekend |
| Leesbaarheid voor machines | Uitstekend | Correct |
| Commentaar | Nee | Ja (#) |
| Significante inspringing | Nee | Ja |
| Parsesnelheid | Snel | Trager |
| Rijke types (datum, binair) | Nee | Ja |
| Anchors / aliassen | Nee | Ja |
| Typisch gebruiksgeval | API, opslag, data-uitwisseling | Configuratie, infra-as-code |
Typische gebruiksgevallen
Kies JSON wanneer
- Je een REST-API of een webhook-endpoint ontwerpt
- Je data opslaat in een NoSQL-database of een cache
- Je data uitwisselt tussen frontend en backend
- Parseerprestaties kritisch zijn (hoge doorvoer, edge)
- Je een universeel ondersteund formaat zonder afhankelijkheid wil
Kies YAML wanneer
- Je een handmatig bewerkte applicatieconfiguratie schrijft
- Je commentaar nodig hebt om opties te documenteren
- Je Kubernetes, Docker Compose, GitHub Actions of Ansible schrijft
- Je blokken wil factoriseren met anchors en aliassen
- Leesbaarheid voorrang krijgt op verwerkingssnelheid
Aanbeveling
De eenvoudige regel: JSON voor de machine, YAML voor de mens. Als je bestand wordt geproduceerd of geconsumeerd door een programma, kies dan JSON. Wordt het met de hand geschreven en herlezen, kies dan YAML. Veel ecosystemen aanvaarden beide: Symfony leest YAML, JSON en XML voor zijn configuraties, Kubernetes aanvaardt beide voor zijn manifests. Bij twijfel kies YAML voor menselijke configuratie en JSON voor geautomatiseerde stromen.
Je kunt de conversie van het ene naar het andere formaat testen met onze JSON / YAML-converter en snel een document opmaken met de JSON-formatter.
Veelgestelde vragen
Is YAML trager dan JSON?
Ja, in de regel kost het parsen van een YAML-document meerdere keren meer CPU dan het parsen van hetzelfde JSON-document, omdat de YAML-grammatica rijker is (inspringing, tags, anchors). In de praktijk is het verschil verwaarloosbaar voor configuratiebestanden. Het wordt merkbaar wanneer je tienduizenden documenten in een lus parseert.
Kan YAML automatisch worden omgezet naar JSON?
Ja: elk YAML-document kan zonder verlies worden omgezet naar JSON als je YAML-specifieke types (timestamps, anchors) vermijdt. Omgekeerd is het nog eenvoudiger, aangezien JSON een subset is van YAML 1.2. Onze converter doet het in beide richtingen.
Aanvaardt JSON commentaar?
Nee, de JSON-standaard verbiedt het. Er bestaan dialecten (JSON5, JSONC) maar die worden niet universeel ondersteund. Heb je commentaar nodig, kies dan YAML of TOML.
Waarom gebruikt Kubernetes YAML en geen JSON?
Kubernetes-manifests worden door mensen geschreven en gelezen. YAML biedt commentaar, een minder ruizerige syntaxis en de mogelijkheid om te factoriseren via anchors. De Kubernetes-API aanvaardt ook JSON, maar het idiomatische gebruik blijft YAML.
Is YAML echt een superset van JSON?
Ja sinds YAML 1.2: elk geldig JSON-document is een geldig YAML-document. Daardoor kun je JSON inbedden in een YAML-bestand zonder het aan te passen, wat handig is voor gegenereerde of geplakte blokken.