ToolDeck

JSON Schema Validator

Valideer JSON-data tegen een JSON Schema (Draft 7)

Probeer een voorbeeld

JSON-data

JSON Schema

Draait lokaal · Veilig om secrets te plakken
Draait lokaal · Veilig om secrets te plakken

Wat is JSON Schema-validatie?

JSON Schema-validatie is het proces van controleren of een JSON-document voldoet aan een set structurele beperkingen en waardebeperkingen die zijn gedefinieerd in een JSON Schema. Het schema zelf is een JSON-document dat de verwachte vorm van uw data beschrijft: welke eigenschappen verplicht zijn, welke typen ze moeten hebben, de toegestane bereiken voor getallen, stringpatronen, arraylenghten en meer. De JSON Schema-specificatie wordt onderhouden op json-schema.org en gepubliceerd als een reeks IETF-drafts; Draft 7 en Draft 2020-12 zijn het meest breed geadopteerd.

Waar gewone JSON-validatie alleen syntaxis controleert (zijn de haakjes goed gesloten? zijn strings tussen aanhalingstekens?), gaat schemavalidatie verder. Het beantwoordt vragen als: bevat de respons van deze API een "id"-veld dat altijd een integer is? Is het "status"-veld een van drie toegestane waarden? Zijn geneste objecten correct opgebouwd? Dit soort structurele verificatie vangt bugs die syntaxiscontroles volledig missen, omdat syntactisch geldige JSON nog steeds semantisch onjuist kan zijn voor uw applicatie.

JSON Schema wordt gebruikt in OpenAPI/Swagger-definities, validatie van configuratiebestanden, formuliervalidatie, documentbeperkingen in databases en geautomatiseerd testen. Tools zoals Ajv (JavaScript), jsonschema (Python) en check-jsonschema (CLI) implementeren de specificatie zodat u data programmatisch kunt valideren. Met deze online validator kunt u zowel een schema als een datadocument plakken om direct de conformiteit te controleren, zonder een bibliotheek te installeren.

Waarom een online JSON Schema Validator gebruiken?

Schemas schrijven en validatiefouten handmatig debuggen kost veel tijd. Een online JSON Schema Validator geeft directe feedback of uw data overeenkomt met uw schema, met duidelijke foutmeldingen die precies de eigenschap aanwijzen die niet voldoet.

Directe validatiefeedback
Plak uw schema en data en zie de validatieresultaten in realtime. Elke fout toont het JSON-pad en de specifieke beperking die niet is voldaan, zodat u problemen kunt oplossen zonder door de uitvoer van een validatiebibliotheek te hoeven lezen.
🔒
Privacy-first, verwerking uitsluitend in de browser
Uw JSON-data verlaat nooit uw browser. Alle validatie wordt lokaal uitgevoerd in JavaScript. Geen server, geen logboeken, geen dataopslag. Veilig voor schemas die interne API's beschrijven of propriëtaire veldnamen bevatten.
🎯
Draft-bewuste validatie
De validator ondersteunt Draft 7-sleutelwoorden zoals type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf en additionalProperties. Test uw schema hier voordat u het integreert in uw bouwpipeline of testsuites.
📋
Geen account of installatie
Open de pagina, plak uw JSON en valideer. Geen npm install, geen pip-pakket, geen Docker-image. Handig wanneer u een snelle schemacontrole nodig heeft op een machine waar u geen ontwikkeltools kunt installeren.

Gebruiksscenario's voor JSON Schema-validatie

API-contracttesten
Valideer API-responsen tegen het schema dat is gedefinieerd in uw OpenAPI-specificatie. Detecteer brekende wijzigingen — zoals een veld dat van integer naar string verandert — voordat ze de productie bereiken.
Verificatie van configuratiebestanden
Controleer of JSON-configuratiebestanden voor CI/CD-pipelines, Kubernetes-manifests of applicatie-instellingen overeenkomen met het verwachte schema vóór het committen. Voorkomt implementatiefouten door ontbrekende of verkeerd gespelde sleutels.
DevOps-pipeline gates
Voeg schemavalidatie toe als CI-stap om payloads te weigeren die het contract schenden. Dit werkt voor Terraform-variabelenbestanden, GitHub Actions-invoer of gestructureerde JSON die door automatisering wordt gebruikt.
QA en review van testdata
Controleer of testfixtures en mockdatabestanden voldoen aan hetzelfde schema dat uw applicatie verwacht. Niet-overeenkomende testdata is een veelvoorkomende oorzaak van vals-positieve testresultaten.
Inname in datapipelines
Valideer inkomende JSON-records aan het begin van een datapipeline. Schemavalidatie filtert misvormde events eruit voordat ze uw datawarehouse bereiken, wat de opruimkosten verderop in de pipeline vermindert.
JSON Schema-syntaxis leren
Experimenteer interactief met schemasleutelwoorden. Schrijf een schema, plak testdata en zie welke beperkingen slagen of mislukken. Sneller dan een script schrijven en steeds opnieuw uitvoeren vanuit de terminal.

Referentie voor JSON Schema-sleutelwoorden

Een JSON Schema is opgebouwd uit sleutelwoorden die elk een beperking opleggen aan de gevalideerde data. De onderstaande tabel toont de meest gebruikte sleutelwoorden in Draft 7 en later. Elk sleutelwoord kan worden gecombineerd met andere sleutelwoorden in hetzelfde schema-object.

SleutelwoordDoelVoorbeeld
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

Vergelijking van JSON Schema-drafts: Draft 7 vs 2019-09 vs 2020-12

JSON Schema heeft meerdere draftversies doorlopen. Draft 7 (gepubliceerd in 2018) heeft de breedste toolingondersteuning. Draft 2019-09 introduceerde $defs (ter vervanging van definitions), unevaluatedProperties en $recursiveRef. Draft 2020-12 (de meest recente stabiele release) verving $recursiveRef door $dynamicRef en introduceerde prefixItems voor tuplevalidatie. Controleer bij het kiezen van een draft of uw validatiebibliotheek deze ondersteunt. Ajv ondersteunt alle drie de drafts. De Python-bibliotheek jsonschema ondersteunt tot en met 2020-12 sinds versie 4.0.

FunctieDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Codevoorbeelden

Deze voorbeelden laten zien hoe u JSON programmatisch kunt valideren tegen een schema. Elk voorbeeld gebruikt een goed onderhouden bibliotheek voor het betreffende taalecosysteem.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Veelgestelde vragen

Wat is het verschil tussen JSON-validatie en JSON Schema-validatie?
JSON-validatie controleert of een string geldige JSON-syntaxis heeft: correct geneste haakjes, sleutels tussen aanhalingstekens, geen afsluitende komma's. JSON Schema-validatie gaat een stap verder en controleert of de geparsede JSON-data overeenkomt met een structureel contract: juiste typen, verplichte velden aanwezig, waarden binnen toegestane bereiken. U heeft geldige JSON nodig voordat u een schema kunt toepassen, maar geldige JSON kan nog steeds mislukken bij schemavalidatie.
Welke JSON Schema-draft moet ik gebruiken?
Draft 7 is de veiligste standaard. Deze heeft de breedste bibliotheekondersteuning over talen heen en dekt de sleutelwoorden die de meeste projecten nodig hebben: type, properties, required, enum, pattern, anyOf, oneOf, allOf en $ref. Gebruik Draft 2020-12 als u functies nodig heeft zoals prefixItems voor tuplevalidatie, $dynamicRef voor uitbreidbare schemas of unevaluatedProperties voor strikte objectvormen. Raadpleeg de documentatie van uw validatiebibliotheek om draftondersteuning te bevestigen vóór een upgrade.
Hoe werkt $ref in JSON Schema?
Het sleutelwoord $ref laat u een ander schema refereren via URI in plaats van het te dupliceren. Een waarde zoals "$ref": "#/$defs/address" verwijst naar een schema dat is gedefinieerd in het $defs-gedeelte van hetzelfde document. U kunt ook externe bestanden refereren met "$ref": "https://example.com/schemas/address.json". In Draft 7 vervangt $ref alle nevenliggende sleutelwoorden in hetzelfde object. In Draft 2019-09 en later worden nevenliggende sleutelwoorden naast $ref toegepast.
Wat is het verschil tussen anyOf, oneOf en allOf?
allOf vereist dat de data overeenkomt met elk subschema in de array. anyOf vereist een overeenkomst met ten minste één subschema. oneOf vereist een overeenkomst met precies één subschema en mislukt als de data met nul of meer dan één overeenkomt. Voor nullable velden is anyOf met een type en null gebruikelijk: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Gebruik oneOf wanneer subschema's wederzijds exclusief zijn, zoals getagde unions.
Kan JSON Schema geneste objecten en arrays valideren?
Ja. Gebruik het sleutelwoord properties om schemas te definiëren voor geneste objectsleutels, en het sleutelwoord items om een schema te definiëren waaraan elk arrayelement moet voldoen. U kunt deze tot elke diepte nesten. Voor arrays waarbij elke positie een ander schema heeft (tuples), gebruikt u prefixItems in Draft 2020-12 of de arrayvorm van items in Draft 7.
Worden de data die ik in dit hulpmiddel plak naar een server gestuurd?
Nee. De validator draait volledig in uw browser met behulp van JavaScript. Uw JSON-data en schema worden nooit naar een server verzonden. U kunt dit verifiëren door de netwerkinspector van uw browser te openen terwijl u het hulpmiddel gebruikt.
Hoe valideer ik JSON Schema in een CI/CD-pipeline?
Gebruik een CLI-validator zoals check-jsonschema (Python/pip) of ajv-cli (Node.js/npm). Beide accepteren een schemabestand en een of meer databestanden als argumenten. Voeg de validatieopdracht toe als stap in uw CI-configuratie. Als validatie mislukt, sluit het proces af met een niet-nulcode, waardoor de pipeline wordt geblokkeerd. Voor GitHub Actions kunt u ook de check-jsonschema-actie direct gebruiken.