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 mensenGoedUitstekend
Leesbaarheid voor machinesUitstekendCorrect
CommentaarNeeJa (#)
Significante inspringingNeeJa
ParsesnelheidSnelTrager
Rijke types (datum, binair)NeeJa
Anchors / aliassenNeeJa
Typisch gebruiksgevalAPI, opslag, data-uitwisselingConfiguratie, 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.