JSON Schema-validator
Valideer JSON tegen elk JSON Schema direct in je browser. Ondersteunt Draft 2020-12, 2019-09 en Draft-07 met padnauwkeurige foutmeldingen. 100% privé — geen upload, geen account, gratis.
Wat is een JSON Schema Validator?
Een JSON Schema Validator is een programma dat twee JSON-documenten neemt — een datadocument en een schemadocument — en rapporteert of de data voldoet aan het contract van het schema. Het schema verklaart veldtypes, required-keys, waardebereiken, toegestane enum-waarden, regex-patterns en structuurregels via een vast vocabulaire (type, properties, required, items, enum, oneOf, allOf, $ref, format). De validator doorloopt beide documenten parallel en geeft nul of meer fouten, elk vastgepind op een JSON Pointer-pad in de data.
Validatie draait op runtime, op de grens tussen onbetrouwbare invoer en je code. TypeScript-types verdwijnen op compile-time en kunnen niet helpen bij JSON die binnenkomt via een webhook, een externe API of een gebruikersplaksessie — precies dat gat vult JSON Schema. Combineer het met TypeScript (of Pydantic in Python) en je krijgt compile-time-garanties binnen je codebase plus runtime-garanties op de grens.
Draft 2020-12 is de huidige spec en de juiste keuze voor nieuwe projecten in 2026. Eerdere drafts (2019-09, Draft-07, Draft-06, Draft-04) leven voort in legacy-codebases — Draft-07 is nog gebruikelijk in Helm-charts, VS Code-settings en oudere Ajv-configuraties. OpenAPI 3.1 gebruikt Draft 2020-12 ingebouwd; OpenAPI 3.0 gebruikt een Draft 4-subset.
Deze tool draait volledig in je browser. Je JSON, je schema en de validatie-uitvoer verlaten je machine nooit — veilig voor proprietaire API-contracten en gevoelige payloads. Interne $ref-pointers lossen automatisch op; externe HTTP-refs zijn bewust uitgeschakeld voor de privacy.
Aan het werk met aangrenzende JSON-tools? Formatteer JSON met de JSON Formatter voor je hier plakt; vergelijk twee JSON-documenten met JSON Diff; converteer met JSON naar YAML en YAML naar JSON. Voor end-to-end-validatie in Node, Python en de browser, zie onze gids voor JSON Schema-validatie.
// A 5-line schema that catches three real bugs
const schema = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
};
// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
// /id → type: expected integer, got string
// /email → required: missing
// /age → maximum: 200 > 150
// In Node: new Ajv().compile(schema)(bad) // false; ajv.errors has the paths
// In Python: jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install Belangrijkste functies
Multi-draftondersteuning
Draft 2020-12 (standaard), 2019-09 en Draft-07. Detecteert de draft automatisch via de $schema-URI; fallback-keuzeknop voor schema's zonder URI.
Padnauwkeurige fouten
Elke fout bevat een JSON Pointer (bijv. /user/email/0), het falende keyword (type, required, pattern) en een eenregelige boodschap. Klik om naar de plek te springen.
Live validatie
Valideert terwijl je typt. Fouten verversen real-time, dus je itereert op het schema of de data zonder een knop te hoeven gebruiken.
Dekking van format-keywords
email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — de formats die je echt gebruikt, gevalideerd met beproefde patterns.
100% browsergebaseerd
Invoer verlaat je machine nooit. Geen upload, geen analytics op wat je plakt, geen localStorage van JSON. Veilig voor proprietaire contracten en gevoelige payloads.
Voorbeeldschema's, één klik
Laadbare presets (signup-formulier, webhook-envelope, configuratiebestand, array van orders) brengen je in onder de vijf seconden naar een werkende validatie.
Voorbeelden
Geldig object — required + types
{
"id": 42,
"email": "alice@example.com",
"age": 30
} {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
} Het schema verklaart id en email als required en legt types vast. Bovenstaande data is geldig — aan elke regel is voldaan. Verwijder email of zet id om naar een string om padnauwkeurige fouten te zien.
Ongeldig — required ontbreekt + verkeerd type
{
"id": "42",
"age": 200
} {
"type": "object",
"properties": {
"id": { "type": "integer" },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "maximum": 150 }
},
"required": ["id", "email"]
} Drie fouten: /id is een string in plaats van integer, /email ontbreekt, /age (200) overschrijdt maximum 150. Elke fout meldt het exacte JSON Pointer-pad — zo corrigeer je de data of versoepel je het schema zonder gokken.
Discriminated union — oneOf met const
{
"type": "order.created",
"data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
} {
"oneOf": [
{
"properties": {
"type": { "const": "order.created" },
"data": {
"type": "object",
"properties": {
"orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
"totalUsd": { "type": "number", "minimum": 0 }
},
"required": ["orderId", "totalUsd"]
}
},
"required": ["type", "data"]
},
{
"properties": {
"type": { "const": "order.refunded" },
"data": { "type": "object", "required": ["refundId"] }
},
"required": ["type", "data"]
}
]
} Validatie van een webhook-envelope. De eerste oneOf-tak past omdat type "order.created" is. Zet type op "order.refunded" of breek het orderId-pattern om te zien hoe oneOf per tak rapporteert.
Array van objecten — items + uniqueItems
[
{ "sku": "A1", "qty": 3 },
{ "sku": "B2", "qty": 5 },
{ "sku": "A1", "qty": 3 }
] {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
"qty": { "type": "integer", "minimum": 1 }
},
"required": ["sku", "qty"]
}
} Twee items zijn byte-identiek, dus uniqueItems slaat aan. Item 0 en 2 botsen — de validator meldt het duplicaat in de array-root. Handig om dubbele winkelwagenregels en merge-bugs in verzendaanvragen op te sporen.
Gebruiksaanwijzing
- 1
Plak je JSON Schema
Zet je schema in het rechterpaneel. De validator detecteert de draft automatisch via de $schema-URI als die er is; anders kies je Draft 2020-12, 2019-09 of Draft-07 in de werkbalk.
- 2
Plak je JSON-data
Zet het te controleren JSON-document in het linkerpaneel. Validatie draait terwijl je typt; grote invoer (>200 KB) schakelt over op een handmatige Valideren-knop zodat het tikken vlot blijft.
- 3
Lees de foutenlijst
Elke fout heeft een JSON Pointer-pad, een keyword en een eenregelige boodschap. Klik op een fout om naar de plek in je data te springen, los hem op en zie het aantal real-time dalen.
Veelvoorkomende JSON Schema-valkuilen
Type: integer vs number
JSON Schema beschouwt 1.0 als number, maar niet als integer. Zegt je contract integer, dan wijst de validator 1.0 af — ook al noemen de meeste talen het gelijk aan 1. Kies number tenzij je echt integer nodig hebt.
{ "qty": 1.0 } schema: { "type": "integer" } → error: not an integer { "qty": 1 } schema: { "type": "integer" } → valid required op verkeerd nestelniveau
required moet naast properties staan, niet erbinnen. Een required-array binnen een propertydeclaratie wordt stilzwijgend genegeerd — de validator dwingt het nooit af.
{ "properties": { "name": { "type": "string", "required": true } } } { "properties": { "name": { "type": "string" } }, "required": ["name"] } additionalProperties is standaard true
Zonder additionalProperties: false is het schema open — elke extra key gaat erdoor. Dit vergeten is de voornaamste reden dat schema's „alles accepteren".
{ "properties": { "id": { "type": "integer" } } } accepts: { "id": 1, "foo": "bar", "x": null } { "properties": { "id": { "type": "integer" } }, "additionalProperties": false } OpenAPI 3.0 nullable vs Draft 2020-12 type-array
OpenAPI 3.0 gebruikt nullable: true; Draft 2020-12 gebruikt type: ["string", "null"]. Ze mengen levert schema's op die er goed uitzien maar nooit echt null toelaten.
{ "type": "string", "nullable": true } in 2020-12: nullable is just an unknown keyword { "type": ["string", "null"] } in 2020-12: explicitly allows null Pattern zonder anchors
JSON Schema-regex matcht standaard ergens — pattern: "^[A-Z]+$" verankert op de hele string, maar pattern: "[A-Z]+" matcht zodra ergens een hoofdletter staat.
pattern: "[A-Z]+" accepts: "helloX" (because X matches)
pattern: "^[A-Z]+$" accepts only: "HELLO"
oneOf waar anyOf bedoeld werd
oneOf verlangt dat precies één tak matcht. Accepteren twee takken dezelfde vorm, dan faalt oneOf op data die anyOf zou laten passeren — en de foutmelding is verwarrend ("matches more than one").
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → error: matches both anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → valid Veelvoorkomende gebruikssituaties
- API-requestvalidatie
- Plak een request body en het schema van je endpoint vóór de deploy. Vang 400-responses op die je tests niet dekten — ontbrekende required-velden, verkeerde types, getallen buiten bereik.
- Webhook-payloadverificatie
- Stuurde de leverancier een payload die je handler weigert? Valideer de werkelijke payload tegen je schema, en daarna tegen het gepubliceerde schema van de leverancier. Het verschil tussen die twee is je bug.
- Configuratiebestandlinting
- package.json, tsconfig.json, helm values.yaml — elk configuratiebestand heeft een publiek schema. Schema plakken, configuratie plakken, typefout vinden. Geen trial-and-error meer.
- OpenAPI-componenttest
- Til een schemacomponent uit een OpenAPI 3.1-document, plak hem hier en valideer voorbeeldpayloads. Sneller dan een mockserver opspinnen, deterministisch, geen SDK nodig.
- Pre-flight voor formulierinzending
- Plak een voorbeeld-formulierpayload voor je de frontendvalidatie aansluit. Bevestig dat het schema afwijst wat je verwacht en accepteert wat je verwacht — en lever daarna hetzelfde schema aan client én server.
- Datapipelinecontract-controle
- ETL-uitvoer gedrift? Plak een voorbeeldrij en het downstream-schema. Zoek uit welke producer veranderde en welke keys braken voordat de pipeline 10.000 records opnieuw probeert.
Technische details
- Draft 2020-12-conform
- Implementeert de gepubliceerde Draft 2020-12-spec — keywords, typesysteem, format-vocabulaire. Dubbel gecontroleerd tegen Ajv 8.x en de uitvoer van ajv-formats.
- JSON Pointer-foutpaden
- Fouten gebruiken RFC 6901 JSON Pointer (/user/email/0). Elke keywordfout wijst naar één oplosbare plek in de data — geen ambiguïteit, geen string-search.
- Interne $ref-resolutie
- Lost $ref-pointers binnen één document op (#/$defs/foo, #/properties/bar). Cycli worden gedetecteerd en gerapporteerd. Externe HTTP $refs uitgeschakeld voor de privacy.
Aanbevolen aanpak
- Zet altijd additionalProperties: false
- Bij invoercontracten (request bodies, configuratiebestanden, queueberichten) zijn onbekende keys meestal bugs — typefouten, per ongeluk toegevoegde velden of aanvallers die aftasten. Standaard afwijzen.
- Gebruik $defs voor herbruikbare subschema's
- Inline dezelfde vorm twee keer en ze drijven uit elkaar. Zet gedeelde definities in $defs en refereer met $ref — één bron van waarheid, elke wijziging werkt overal door.
- Valideer voor de businesslogica
- Voer schemavalidatie meteen na JSON.parse uit, voordat je de geparseerde structuur aanraakt. Type-narrowing, defaults en persistentie gaan er allemaal van uit dat het contract houdt — zorg dat dat zo is.
Veelgestelde vragen
Wat is JSON Schema-validatie?
Welke JSON Schema-drafts ondersteunt deze validator?
Hoe valideer ik JSON tegen een schema?
Wat is het verschil tussen JSON Schema-validatie en JSON-syntaxcontrole?
Waarom wijst mijn schema JSON af die er goed uitziet?
Worden $ref en remote schemareferenties ondersteund?
Wat doet additionalProperties: false?
Hoe valideer ik JSON tegen een schema in Node.js of Python?
Wat is het verschil tussen oneOf, anyOf en allOf?
Worden OpenAPI-schema's ondersteund?
Waarom zegt de validator dat mijn JSON Schema zelf ongeldig is?
Stuurt de tool mijn JSON of schema naar een server?
Kan ik JSON Lines (NDJSON) of meerdere documenten valideren?
Gerelateerde tools
Alle tools bekijken →Base64 decoderen en encoderen online
Encodering en formattering
Base64 decoderen en encoderen direct in je browser. Realtime conversie met volledige UTF-8- en emoji-ondersteuning. 100% privé — geen account nodig.
JSON Diff (Vergelijken)
Encodering en formattering
Vergelijk twee JSON-bestanden direct in je browser. Zij-aan-zij markering, RFC 6902 JSON Patch-uitvoer, negeer storende velden zoals tijdstempels en ID's. 100% privé, geen upload.
Online JSON-formatter & validator
Encodering en formattering
Formatteer en valideer JSON direct in je browser. Gratis online tool met syntaxvalidatie, foutdetectie, minificeren en kopiëren met één klik. 100% privé.
JSON naar YAML omzetter
Encodering en formattering
Plak JSON en krijg direct YAML. Live conversie in je browser. K8s/Compose-klaar, 2/4 spaties inspringing, slimme aanhalingstekens. 100% privé, geen upload.
QR-codegenerator — URL, WiFi, vCard, E-mail, SMS, Locatie
Encodering en formattering
Gratis QR-codegenerator. Maak statische QR-codes voor URL, WiFi, vCard, e-mail en SMS. SVG- & PNG-download. Verloopt nooit, geen registratie, 100% in jouw browser.
URL decoderen en encoderen online
Encodering en formattering
Decodeer of encodeer URL's in realtime met ingebouwde URL-parser. Twee modi: encodeURI en encodeURIComponent. 100% privé, geen data naar servers.