JSON als uitvoerformaat
JSON (JavaScript Object Notation) is het standaardformaat voor data-uitwisseling in moderne software. Als je AI-output wilt gebruiken in code, databases of API's, is JSON de meest praktische keuze.
Het probleem: taalmodellen zijn getraind op tekst, niet op code. Ze produceren van nature vrije tekst en moeten actief worden gestuurd om valide JSON te leveren. Met de juiste technieken, en zeker met de native structured-output-modi van de grote providers, is dit goed te doen.
Basistechniek: expliciet vragen
De simpelste aanpak werkt verrassend goed voor eenvoudige structuren:
Extraheer de volgende gegevens als valide JSON-object:
- naam
- leeftijd
- e-mail
Tekst: "Hallo, ik ben Peter Jansen, 34 jaar, te bereiken via p.jansen@voorbeeld.nl"
Voor eenvoudige extractietaken levert dit betrouwbare JSON op. Voeg "Geef alleen de JSON terug, geen uitleg" toe om extra tekst te voorkomen.
Schema-gedreven generatie
Voor complexe of gestandaardiseerde output geef je het schema expliciet mee:
Genereer een JSON-object voor een productbeschrijving met dit schema:
{
"id": "integer",
"naam": "string (max 50 tekens)",
"prijs": "number (twee decimalen)",
"categorie": "string (een van: elektronica, kleding, voeding, overig)",
"beschikbaar": "boolean",
"tags": "array van strings (max 5)"
}
Product: Sony WH-1000XM5 noise-cancelling koptelefoon, 379 euro, op voorraad.
Door het schema volledig te beschrijven inclusief typen en beperkingen, levert het model structureel correctere JSON.
Few-shot voor JSON
Voor herhaalde, consistente JSON-generatie werkt few-shot uitstekend:
Converteer productinformatie naar JSON.
Invoer: "Rode sportschoenen, maat 42, 89.95 euro"
JSON: {"naam": "Rode sportschoenen", "maat": 42, "prijs": 89.95}
Invoer: "Blauwe jeans, maat L, 59.99 euro"
JSON: {"naam": "Blauwe jeans", "maat": "L", "prijs": 59.99}
Invoer: "Groene regenjas, maat XL, 129.00 euro"
JSON:
Twee voorbeelden zijn doorgaans genoeg voor consistente JSON-output.
Zo krijg je betrouwbare JSON
- Gebruik native structured output als die er is. OpenAI, Anthropic en Google bieden modi die schema-conforme JSON afdwingen, veel betrouwbaarder dan prompts alleen.
- Beschrijf het schema volledig. Velden, typen, toegestane waarden en beperkingen.
- Geef een voorbeeldoutput mee. Een concreet voorbeeld is duidelijker dan een abstracte beschrijving.
- Vraag alleen om JSON. Bijvoorbeeld: "Geef alleen het JSON-object, geen uitleg of code-blokken."
- Valideer programmatisch. Gebruik altijd
JSON.parse()of een equivalent en doe bij een fout een nieuwe poging.
Native structured output gebruiken
De meest betrouwbare manier om JSON te genereren is via de native structured-output-ondersteuning van de API. In 2025 en 2026 hebben de drie grote providers dit volwassen gemaakt, waarbij het schema tijdens het genereren wordt afgedwongen in plaats van alleen via de prompt gevraagd.
OpenAI Structured Outputs
Geef een JSON Schema mee met response_format: { type: "json_schema", strict: true }. Het model volgt het schema exact, inclusief verplichte velden, typen en enum-waarden. De oudere json_object JSON-modus garandeert alleen geldige JSON-syntaxis, geen schema, en wordt inmiddels als legacy beschouwd. Gebruik voor nieuwe projecten de strict json_schema-modus.
Anthropic structured outputs Claude ondersteunt sinds eind 2025 native structured outputs. Je geeft een JSON Schema mee en het platform compileert dat tot een grammatica die de tokengeneratie beperkt, zodat het model letterlijk geen schema-schendende uitvoer kan produceren. Daarnaast bestaat de strict tool-use-aanpak, waarbij je een tool definieert met een input-schema en het model dwingt die met de juiste structuur aan te roepen. Controleer de actuele documentatie voor de vereiste beta-header en welke Claude-modellen het ondersteunen.
Google Gemini
Zet responseMimeType op application/json en geef een responseSchema mee. Sinds 2026 ondersteunt Gemini volledige JSON Schema op alle actief ondersteunde modellen, waardoor bibliotheken als Pydantic (Python) en Zod (TypeScript) direct werken. De sleutelvolgorde van je schema blijft daarbij behouden in de uitvoer.
Native modus boven prompt-only
Native structured output is vrijwel altijd betrouwbaarder dan prompt-only technieken. Werk je in productie met JSON, gebruik dan de schema-modus van je provider als die beschikbaar is. Houd er rekening mee dat de exacte parameternamen en ondersteunde modellen per provider verschillen en regelmatig wijzigen, dus check de actuele API-documentatie.
Veelvoorkomende JSON-fouten en hoe je ze voorkomt
Deze fouten zien vooral bij prompt-only generatie. Native schema-modi voorkomen de meeste ervan al, maar het is goed om ze te herkennen.
Trailing commas: JSON staat geen trailing commas toe, zoals in {"naam": "Jan",}. Specificeer dit in je prompt: "Zorg voor strikte JSON zonder trailing commas."
Niet-gesloten strings: lange tekstvelden worden soms afgekapt. Begrens veldlengtes in je schemabeschrijving.
Verkeerde escaping: aanhalingstekens in stringwaarden moeten worden geescaped. Bij modellen die dit missen vraag je om "JSON met correct geescapte speciale tekens."
Type-inconsistentie: het model geeft "42" in plaats van 42. Wees expliciet over typen: "leeftijd is een integer, geen string."
Markdown code-blokken: modellen wikkelen JSON soms in een code-blok met drie backticks. Vraag expliciet om raw JSON zonder code-blokken, of strip de fences programmatisch weg.
Valideer altijd, vertrouw nooit blind
Vertrouw nooit blindelings op JSON die een taalmodel genereert. Valideer altijd met een echte JSON-parser. Bij productiesystemen: implementeer retries en foutlogging voor parse-fouten, zelfs als je schema-modus gebruikt.
Complexe geneste JSON
Voor diep geneste structuren geldt: hoe complexer, hoe meer kans op fouten. Bruikbare strategieen:
Deel op: genereer de bovenste laag eerst en daarna de geneste objecten afzonderlijk.
Template invullen: geef het volledige JSON-sjabloon mee met null-waarden en vraag het model de nulls in te vullen.
Schema-validatie in de loop: stuur na generatie een validatieprompt die het model laat controleren of de gegenereerde JSON het schema volgt. Vang in code de parse-fouten op en stuur die als feedback terug voor een correctieronde.
Praktisch voorbeeld: reviews extraheren
Stel dat je uit klantreviews gestructureerde data wilt halen. Combineer schema, voorbeeld en strikte instructie:
Extraheer uit elke review een JSON-object met dit schema:
{
"sentiment": "string (een van: positief, neutraal, negatief)",
"score": "integer 1 tot 5",
"onderwerpen": "array van strings",
"bevat_klacht": "boolean"
}
Voorbeeld:
Review: "Snelle levering maar de doos was beschadigd."
JSON: {"sentiment": "neutraal", "score": 3, "onderwerpen": ["levering", "verpakking"], "bevat_klacht": true}
Review: "Geweldig product, precies wat ik zocht!"
JSON:
In productie zou je hier de structured-output-modus van je provider overheen leggen, zodat het schema gegarandeerd wordt afgedwongen en je alleen nog hoeft te parsen.
Moet ik JSON altijd valideren?
Ja, altijd. Zelfs met schema-afgedwongen modi kunnen onverwachte situaties optreden, zoals een afgekapte respons door een tokenlimiet of een netwerkfout. Defensief programmeren vereist validatie.
Hoe ga ik om met optionele velden?
Geef dit expliciet aan, bijvoorbeeld: "Het veld telefoon is optioneel, laat het weg als het niet aanwezig is." In een JSON Schema markeer je het veld simpelweg niet als verplicht. Zo voorkom je dat het model null of lege strings invult.
Kan ik JSON-arrays van objecten genereren?
Ja. Beschrijf de array-structuur, bijvoorbeeld: "Geef een JSON-array van objecten, elk met de velden naam en score." Geef een voorbeeld van de array-syntaxis mee voor de beste resultaten.
Hoe groot kan een JSON-output zijn?
De grootte wordt begrensd door het outputvenster van het model. Bij moderne modellen ligt dat hoger dan de oude 4k tot 16k tokens, maar grote datasets verwerk je toch het beste in batches of pagina's om afkappen te voorkomen.
Wat is het verschil tussen JSON mode en structured outputs?
JSON mode garandeert alleen geldige JSON-syntaxis. Structured outputs (schema-modus) dwingt bovendien jouw exacte schema af, inclusief verplichte velden, typen en enum-waarden. Voor productie is de schema-modus de aanrader.
Werkt dit ook met Pydantic of Zod?
Ja. OpenAI, Anthropic en Gemini ondersteunen in 2026 JSON Schema breed, waardoor je je schema kunt definieren met Pydantic (Python) of Zod (TypeScript) en die direct kunt doorgeven aan de API.
JSON-generatie met AI is betrouwbaar te implementeren met de juiste combinatie van schema-instructies, voorbeelden en native API-features. De sleutel blijft programmatische validatie als vangnet.