Als je al langer dan een week code schrijft, ben je vrijwel zeker JSON tegengekomen. Je ziet het overal — REST API-responses, configuratiebestanden, database-documenten, browseropslag, logs. Maar wat is het nu precies, en waarom is het het formaat geworden dat het web heeft opgeslokt?
JSON staat voor JavaScript Object Notation. Ondanks de naam is het volledig taal-onafhankelijk en zijn er libraries voor in elke grote programmeertaal. Douglas Crockford heeft het begin jaren 2000 geformaliseerd als een simpeler alternatief voor XML voor browser-server-communicatie. De spec is ook gestandaardiseerd als ECMA-404, en is zo klein dat hij op een visitekaartje past — en dat is deels waarom JSON heeft gewonnen.
Hoe ziet JSON er eigenlijk uit?
Hier is een JSON-snippet die een user-object voorstelt. Dit ene voorbeeld dekt alle zes datatypes die JSON ondersteunt:
{
"name": "Alice",
"age": 30,
"score": 98.5,
"active": true,
"nickname": null,
"tags": ["developer", "blogger"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}De zes JSON-datatypes
JSON ondersteunt precies zes waardetypes. Meer niet. Die eenvoud is een feature — je leert het hele formaat in een middag.
{
"string": "Hello, world",
"integer": 42,
"float": 3.14159,
"boolean": true,
"nothing": null,
"array": [1, "two", false, null],
"object": { "nested": true }
}- String — Elke tekst tussen dubbele aanhalingstekens.
"hello","2024-01-01",""zijn allemaal geldige strings. - Number — Integer of floating point. Geen onderscheid tussen int en float. Let op:
NaNenInfinityzijn geen geldige JSON-getallen. - Boolean —
trueoffalse, alleen in kleine letters. - Null — Staat voor "geen waarde". Handig voor optionele velden die nog niet zijn ingevuld.
- Array — Een geordende lijst van waardes. Types mogen gemixt worden:
[1, "two", true, null]is prima geldig. - Object — Een verzameling key-value-paren. Keys moeten strings tussen dubbele aanhalingstekens zijn.
Een echte API-response
Zo zou een echte REST API-response eruit kunnen zien als je GET /api/users/42 aanroept.
Let op hoe objecten en arrays genest worden om rijkere data weer te geven:
{
"id": 42,
"username": "alice_dev",
"email": "[email protected]",
"createdAt": "2023-06-15T09:30:00Z",
"preferences": {
"theme": "dark",
"notifications": true,
"language": "en"
},
"roles": ["user", "editor"],
"lastLogin": "2024-01-10T14:22:00Z",
"stats": {
"postsPublished": 27,
"commentsWritten": 154,
"likesReceived": 489
}
}Je kunt in JavaScript bij de theme-voorkeur van alice_dev komen met
user.preferences.theme, of haar eerste rol ophalen met user.roles[0].
Die natuurlijke mapping op de primitives van de taal is precies waarom JSON zo fijn werkt.
JSON-syntaxregels — de valkuilen waar iedereen in trapt
JSON lijkt simpel, maar heeft een paar strikte regels. Eentje verkeerd doen en je hele payload faalt bij het parsen. Dit zijn de fouten die ik het vaakst tegenkom:
- Keys moeten tussen dubbele aanhalingstekens.
{"name": "Alice"}is geldig.{name: "Alice"}niet. Dit breekt developers die vanuit JavaScript komen, waar object-keys zonder quotes gewoon werken. - Geen trailing komma's.
{"a": 1, "b": 2,}gooit een parse-error. JavaScript is hier vergevingsgezind; de JSON-spec niet. - Geen comments.
//- of/* */-comments bestaan niet in JSON. Heb je configbestanden met comments nodig? Overweeg dan YAML of TOML. - Geen
undefined. JavaScript'sundefinedbestaat niet in JSON. Gebruiknullvoor ontbrekende waarden. - Strings moeten dubbele aanhalingstekens gebruiken. Strings met enkele aanhalingstekens zoals
{'key': 'value'}zijn ongeldige JSON. - Geen voorloopnullen.
042is ongeldig.42of0.42zijn prima.
Waarom JSON het web heeft gewonnen
Voor JSON was XML de koning. Een typische XML-API-response was breedsprakig, vereiste een echte XML-parser, en voelde alsof je tegen de taal in werkte. JSON kon worden geparsed door de ingebouwde JavaScript-functie JSON.parse() — geen libraries nodig. Het was kleiner over de lijn, in één oogopslag leesbaar, en paste direct op de objects en arrays die developers al dagelijks gebruikten.
Eind jaren 2000 boden de meeste publieke API's JSON aan naast XML. Begin jaren 2010 hebben veel API's de XML-ondersteuning helemaal laten vallen. Tegenwoordig is JSON de default-aanname voor elke REST API. Zelfs GraphQL, dat REST in veel contexten heeft vervangen, gebruikt nog steeds JSON als response-formaat.
JSON wordt ook bepaald door wat het niet ondersteunt
Sommige beperkingen van JSON zijn bewuste designkeuzes die het simpel en interoperabel houden:
- Geen date-type. Datums zijn gewoon strings. De conventie is het ISO 8601-formaat:
"2024-01-15T09:30:00Z". - Geen binaire data. Bestanden en afbeeldingen worden doorgaans Base64-gecodeerd in een string.
- Geen function values.
{"fn": function(){} }is ongeldig. JSON is pure data, nooit code. - Geen dubbele keys. Technisch toegestaan door de spec, maar het gedrag is ongedefinieerd. In de praktijk nemen parsers de laatste waarde.
Handige tools om met JSON te werken
Dit zijn tools waar je constant naar grijpt bij het werken met JSON: JSON Formatter om geminificeerde responses netjes te pretty-printen, JSON Validator om syntaxfouten te vinden, JSON Minifier om JSON te comprimeren voor productie, en JSON Path om diep geneste data te queryen zonder loops te schrijven.
De officiële spec staat op json.org en is de moeite van het lezen waard — het kost ongeveer 10 minuten en je begrijpt het formaat daarna volledig. De formele IETF-spec is RFC 8259 als je ooit een discussie moet beslechten.
Afronding
JSON is een lichtgewicht, voor mensen leesbaar dataformaat, opgebouwd uit zes waardetypes: strings, numbers, booleans, null, arrays en objects. Het heeft strikte syntaxregels, maar geen verrassingen zodra je ze kent. De reden dat het alomtegenwoordig is geworden, is niet omdat het het krachtigste formaat is — het is omdat het het simpelste formaat is dat 95% van de echte datavereisten dekt. Als je iets bouwt dat met het web te maken heeft, is JSON begrijpen niet optioneel. Het is fundamenteel.