JSON Schema Validator
JSON gegen ein JSON Schema sofort im Browser validieren. Unterstützt Draft 2020-12, 2019-09 und Draft-07 mit pfadgenauen Fehlermeldungen. 100 % privat — kein Upload, kein Konto, kostenlos.
Was ist ein JSON Schema Validator?
Ein JSON Schema Validator ist ein Programm, das zwei JSON-Dokumente nimmt — ein Datendokument und ein Schemadokument — und meldet, ob die Daten dem Vertrag des Schemas entsprechen. Das Schema deklariert Feldtypen, required-Schlüssel, Wertebereiche, erlaubte enum-Werte, Regex-Patterns und Strukturregeln über ein festes Vokabular (type, properties, required, items, enum, oneOf, allOf, $ref, format). Der Validator durchläuft beide Dokumente parallel und gibt null oder mehr Fehler aus, jeweils festgemacht an einem JSON Pointer-Pfad innerhalb der Daten.
Die Validierung läuft zur Laufzeit, an der Grenze zwischen unzuverlässigem Input und Ihrem Code. TypeScript-Typen verschwinden zur Compile-Zeit und können bei JSON, das aus einem Webhook, einer Drittanbieter-API oder einem Nutzer-Paste eintrifft, nicht helfen — genau diese Lücke füllt JSON Schema. Kombinieren Sie es mit TypeScript (oder Pydantic in Python), und Sie erhalten Compile-Time-Garantien innerhalb Ihrer Codebasis plus Laufzeitgarantien an der Grenze.
Draft 2020-12 ist die aktuelle Spezifikation und die richtige Wahl für neue Projekte 2026. Frühere Drafts (2019-09, Draft-07, Draft-06, Draft-04) leben in Legacy-Codebasen weiter — Draft-07 ist in Helm-Charts, VS Code-Settings und älteren Ajv-Konfigurationen noch verbreitet. OpenAPI 3.1 verwendet nativ Draft 2020-12; OpenAPI 3.0 verwendet eine Draft 4-Teilmenge.
Dieses Tool läuft vollständig im Browser. Ihre JSON-Daten, Ihr Schema und die Validierungsausgabe verlassen Ihren Rechner nie — sicher für proprietäre API-Verträge und sensible Payloads. Interne $ref-Pointer werden automatisch aufgelöst; externe HTTP-Refs sind aus Datenschutzgründen bewusst deaktiviert.
Mit benachbarten JSON-Werkzeugen arbeiten? JSON vor dem Einfügen mit dem JSON Formatierer formatieren; zwei JSON-Dokumente mit JSON Diff vergleichen; konvertieren mit JSON zu YAML und YAML zu JSON. Für End-to-End-Validierung in Node, Python und Browser siehe unseren Leitfaden zur JSON Schema-Validierung.
// 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 Hauptfunktionen
Multi-Draft-Unterstützung
Draft 2020-12 (Standard), 2019-09 und Draft-07. Erkennt den Draft automatisch über die $schema-URI; Fallback-Selektor für Schemas ohne URI.
Pfadgenaue Fehler
Jeder Fehler enthält einen JSON Pointer (z. B. /user/email/0), das fehlgeschlagene Keyword (type, required, pattern) und eine einzeilige Nachricht. Klicken, um zur Stelle zu springen.
Live-Validierung
Validiert während der Eingabe. Fehler aktualisieren sich in Echtzeit, sodass Sie an Schema oder Daten iterieren können, ohne über Validate-Buttons gehen zu müssen.
Abdeckung der format-Keywords
email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — die Formate, die Sie tatsächlich nutzen, validiert mit erprobten Patterns.
100 % browserbasiert
Eingaben verlassen Ihren Rechner nicht. Kein Upload, keine Analyse dessen, was Sie einfügen, kein localStorage von JSON. Sicher für proprietäre Verträge und sensible Payloads.
Beispielschemata, ein Klick
Ladbare Vorlagen (Signup-Formular, Webhook-Envelope, Konfigurationsdatei, Array von Bestellungen) bringen Sie in unter fünf Sekunden zu einer funktionierenden Validierung.
Beispiele
Gültiges Objekt — required + Typen
{
"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
} Das Schema deklariert id und email als required und legt Typen fest. Die obigen Daten bestehen die Prüfung — jede Einschränkung ist erfüllt. Entfernen Sie email oder ändern Sie id zu einem String, um pfadgenaue Fehler zu sehen.
Ungültig — fehlendes required + falscher Typ
{
"id": "42",
"age": 200
} {
"type": "object",
"properties": {
"id": { "type": "integer" },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "maximum": 150 }
},
"required": ["id", "email"]
} Drei Fehler: /id ist ein String statt integer, /email fehlt, /age (200) überschreitet maximum 150. Jeder Fehler meldet den exakten JSON Pointer-Pfad — so lassen sich die Daten oder das Schema ohne Rätselraten korrigieren.
Diskriminierte Union — oneOf mit 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"]
}
]
} Validierung eines Webhook-Envelopes. Der erste oneOf-Zweig passt, weil type "order.created" ist. Stellen Sie type auf "order.refunded" um oder verletzen Sie das orderId-Pattern, um zu sehen, wie oneOf zweigweise Fehler meldet.
Array von Objekten — 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"]
}
} Zwei Elemente sind byte-identisch, daher greift uniqueItems. Item 0 und 2 kollidieren — der Validator meldet das Duplikat am Array-Root. Nützlich, um doppelte Warenkorb-Zeilen und Merge-Bugs in Versandanfragen zu erkennen.
Anleitung
- 1
JSON Schema einfügen
Schema in das rechte Panel einfügen. Der Validator erkennt den Draft automatisch über die $schema-URI, sofern vorhanden; andernfalls Draft 2020-12, 2019-09 oder Draft-07 in der Toolbar wählen.
- 2
JSON-Daten einfügen
Das zu prüfende JSON-Dokument in das linke Panel einfügen. Die Validierung läuft während der Eingabe; bei großen Eingaben (>200 KB) wird auf einen manuellen Validate-Button umgeschaltet, damit das Tippen flüssig bleibt.
- 3
Fehlerliste lesen
Jeder Fehler hat einen JSON Pointer-Pfad, ein Keyword und eine einzeilige Nachricht. Auf einen Fehler klicken, um zur Stelle in den Daten zu springen, korrigieren und die Anzahl in Echtzeit sinken sehen.
Häufige JSON Schema-Fallstricke
Type: integer vs number
JSON Schema behandelt 1.0 als number, aber nicht als integer. Sagt Ihr Vertrag integer, lehnt der Validator 1.0 ab — auch wenn die meisten Sprachen es als gleich 1 betrachten. Wählen Sie number, sofern Sie nicht echt integer benötigen.
{ "qty": 1.0 } schema: { "type": "integer" } → error: not an integer { "qty": 1 } schema: { "type": "integer" } → valid required auf falscher Verschachtelungsebene
required muss neben properties stehen, nicht innerhalb. Ein required-Array innerhalb einer Property-Deklaration wird stillschweigend ignoriert — der Validator erzwingt es nie.
{ "properties": { "name": { "type": "string", "required": true } } } { "properties": { "name": { "type": "string" } }, "required": ["name"] } additionalProperties-Standard ist true
Ohne additionalProperties: false ist das Schema offen — jeder zusätzliche Schlüssel passiert. Das zu vergessen ist der häufigste Grund, warum Schemas „alles akzeptieren".
{ "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 verwendet nullable: true; Draft 2020-12 verwendet type: ["string", "null"]. Beides zu mischen erzeugt Schemas, die korrekt aussehen, aber nie tatsächlich null erlauben.
{ "type": "string", "nullable": true } in 2020-12: nullable is just an unknown keyword { "type": ["string", "null"] } in 2020-12: explicitly allows null Pattern ohne Anker
JSON Schema-Regex matcht standardmäßig überall — pattern: "^[A-Z]+$" verankert auf den gesamten String, aber pattern: "[A-Z]+" matcht, sobald irgendwo ein Großbuchstabe vorkommt.
pattern: "[A-Z]+" accepts: "helloX" (because X matches)
pattern: "^[A-Z]+$" accepts only: "HELLO"
oneOf statt anyOf gemeint
oneOf verlangt, dass genau ein Zweig matcht. Wenn zwei Zweige dieselbe Form akzeptieren, scheitert oneOf an Daten, die anyOf bestehen würde — und die Fehlermeldung ist verwirrend („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 Anwendungsfälle
- API-Request-Validierung
- Einen Request-Body und das Schema Ihres Endpunkts vor dem Deploy einfügen. Fangen Sie 400-Antworten ab, die Ihre Tests nicht abdeckten — fehlende required-Felder, falsche Typen, Zahlen außerhalb des Bereichs.
- Webhook-Payload-Verifizierung
- Hat der Anbieter eine Payload geschickt, die Ihr Handler ablehnt? Validieren Sie die tatsächliche Payload gegen Ihr Schema, dann gegen das veröffentlichte Schema des Anbieters. Die Differenz zwischen beiden ist Ihr Bug.
- Konfigurationsdatei-Linting
- package.json, tsconfig.json, helm values.yaml — jede Konfigurationsdatei hat ein öffentliches Schema. Schema einfügen, Konfiguration einfügen, Tippfehler finden. Ohne Trial-and-Error.
- OpenAPI-Komponententest
- Eine Schema-Komponente aus einem OpenAPI 3.1-Dokument extrahieren, hier einfügen, Beispiel-Payloads validieren. Schneller als ein Mock-Server, deterministisch, kein SDK nötig.
- Formular-Submission-Preflight
- Eine Beispiel-Formular-Payload einfügen, bevor Sie die Frontend-Validierung verdrahten. Bestätigen, dass das Schema ablehnt, was Sie erwarten, und akzeptiert, was Sie erwarten — und dann dasselbe Schema an Client und Server ausliefern.
- Datenpipeline-Vertragsprüfung
- Ist die ETL-Ausgabe gedriftet? Eine Beispielzeile und das nachgelagerte Schema einfügen. Ermitteln Sie, welcher Producer sich geändert hat und welche Schlüssel kaputt sind, bevor die Pipeline 10.000 Datensätze erneut versucht.
Technische Details
- Draft 2020-12-konform
- Implementiert die veröffentlichte Draft 2020-12-Spezifikation — Keywords, Typsystem, format-Vokabular. Querverglichen mit Ajv 8.x und ajv-formats-Ausgabe.
- JSON Pointer-Fehlerpfade
- Fehler verwenden RFC 6901 JSON Pointer (/user/email/0). Jeder Keyword-Fehler verweist auf eine einzige auflösbare Stelle in den Daten — keine Mehrdeutigkeit, keine String-Suche.
- Interne $ref-Auflösung
- Löst $ref-Pointer innerhalb eines einzelnen Dokuments auf (#/$defs/foo, #/properties/bar). Zyklen werden erkannt und gemeldet. Externe HTTP-$refs aus Datenschutzgründen deaktiviert.
Best Practices
- Immer additionalProperties: false setzen
- Bei Eingabeverträgen (Request-Bodies, Konfigurationsdateien, Queue-Nachrichten) sind unbekannte Schlüssel meist Bugs — Tippfehler, versehentliche Felder oder Angreifer-Sondierung. Standardmäßig ablehnen.
- $defs für wiederverwendbare Subschemata nutzen
- Dieselbe Form zweimal inline und sie driften auseinander. Geteilte Definitionen in $defs verschieben und mit $ref referenzieren — eine einzige Wahrheitsquelle, jede Änderung wirkt überall.
- Vor der Geschäftslogik validieren
- Schema-Validierung direkt nach JSON.parse ausführen, bevor die geparste Struktur angefasst wird. Type-Narrowing, Defaults und Persistenz setzen alle voraus, dass der Vertrag hält — stellen Sie das sicher.
Häufig gestellte Fragen
Was ist JSON Schema-Validierung?
Welche JSON Schema-Drafts unterstützt dieser Validator?
Wie validiere ich JSON gegen ein Schema?
Was ist der Unterschied zwischen JSON Schema-Validierung und JSON-Syntaxprüfung?
Warum lehnt mein Schema JSON ab, das korrekt aussieht?
Werden $ref und Remote-Schema-Referenzen unterstützt?
Was bewirkt additionalProperties: false?
Wie validiere ich JSON gegen ein Schema in Node.js oder Python?
Was ist der Unterschied zwischen oneOf, anyOf und allOf?
Werden OpenAPI-Schemata unterstützt?
Warum sagt der Validator, mein JSON Schema selbst sei ungültig?
Sendet das Tool meine JSON-Daten oder das Schema an einen Server?
Kann ich JSON Lines (NDJSON) oder mehrere Dokumente validieren?
Verwandte Werkzeuge
Alle Werkzeuge anzeigen →Base64-Dekodierer & -Kodierer
Kodierung & Formatierung
Base64 online kostenlos dekodieren und kodieren. Echtzeitkonvertierung mit voller UTF-8- und Emoji-Unterstützung. 100 % privat — läuft in Ihrem Browser. Keine Anmeldung nötig.
JSON Diff Vergleich
Kodierung & Formatierung
Zwei JSON-Dateien direkt im Browser vergleichen. Nebeneinander-Hervorhebung, RFC 6902 JSON Patch-Ausgabe, störende Felder wie Zeitstempel und IDs ignorieren. 100 % privat, kein Upload.
JSON-Formatierer & Validator
Kodierung & Formatierung
JSON sofort im Browser formatieren, validieren und verschönern. Kostenloses Online-Tool mit Syntaxprüfung, Fehlererkennung, Minifizierung und Ein-Klick-Kopie. 100 % privat.
JSON zu YAML Konverter
Kodierung & Formatierung
JSON einfügen und sofort YAML erhalten. Live-Konvertierung im Browser. K8s/Compose-kompatibel, 2/4-Leerzeichen-Einrückung, intelligentes Quoting. 100 % privat.
QR-Code-Generator — URL, WiFi, vCard, Email, SMS, Standort
Kodierung & Formatierung
Kostenloser QR-Code-Generator. Statische QR-Codes für URL, WiFi, vCard, Email & SMS. Download als SVG & PNG. Kein Ablaufdatum, keine Anmeldung, 100% in Ihrem Browser.
URL-Kodierer & -Dekodierer mit integriertem URL-Parser
Kodierung & Formatierung
URL einfügen zum Dekodieren oder Kodieren in Echtzeit. Integrierter URL-Parser zerlegt jede Komponente in bearbeitbare Felder. Dualmodus: encodeURI & encodeURIComponent. Privat — keine Daten an Server.