Skip to content

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.

Kein Tracking Läuft im Browser Kostenlos
Bitte JSON-Daten und Schema einfügen
Reviewed for Draft 2020-12, 2019-09, and Draft-07 compliance, including type coercion edge cases, format vocabulary, $ref resolution, and JSON Pointer error paths. — Go Tools API Tooling Team · May 7, 2026

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. 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. 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. 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.

✗ Falsch
{ "qty": 1.0 }   schema: { "type": "integer" }   → error: not an integer
✓ Richtig
{ "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.

✗ Falsch
{ "properties": { "name": { "type": "string", "required": true } } }
✓ Richtig
{ "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".

✗ Falsch
{ "properties": { "id": { "type": "integer" } } }   accepts: { "id": 1, "foo": "bar", "x": null }
✓ Richtig
{ "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.

✗ Falsch
{ "type": "string", "nullable": true }   in 2020-12: nullable is just an unknown keyword
✓ Richtig
{ "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.

✗ Falsch
pattern: "[A-Z]+"   accepts: "helloX"   (because X matches)
✓ Richtig
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").

✗ Falsch
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → error: matches both
✓ Richtig
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?
JSON Schema-Validierung prüft, ob ein JSON-Dokument einem in JSON Schema-Syntax geschriebenen Vertrag entspricht. Das Schema deklariert Feldtypen, required-Schlüssel, erlaubte Werte und Strukturregeln; der Validator durchläuft beide Dokumente parallel und meldet jeden Pfad, der den Vertrag verletzt. Er läuft an der Grenze zwischen unzuverlässigem Input (API-Request, Webhook, Konfigurationsdatei, Formular-Payload) und Ihrer Geschäftslogik — und fängt Strukturfehler ab, bevor sie nachgelagerten Code beschädigen. Siehe unseren vollständigen Leitfaden zur JSON Schema-Validierung mit End-to-End-Beispielen für Node, Python und Browser.
Welche JSON Schema-Drafts unterstützt dieser Validator?
Draft 2020-12 (Standard und empfohlen), Draft 2019-09 und Draft-07. Der Validator erkennt den Draft automatisch anhand der $schema-URI des Schemas, sofern vorhanden, andernfalls greift Ihre Auswahl im Dropdown. Für neue Projekte 2026 verwenden Sie Draft 2020-12 — er ist nativ in OpenAPI 3.1 und der Standard von Ajv. Draft-07 bleibt in Legacy-Codebasen verbreitet (ältere AJV-Konfigurationen, Helm-Charts, VS Code-Settings).
Wie validiere ich JSON gegen ein Schema?
Fügen Sie Ihre JSON-Daten in das linke Panel und Ihr JSON Schema in das rechte Panel ein. Der Validator läuft sofort während der Eingabe — grünes Häkchen bedeutet gültig, rote Liste bedeutet Fehler. Jeder Fehler enthält einen JSON Pointer-Pfad (z. B. /user/email), das fehlgeschlagene Keyword (type, required, pattern, minimum) und eine lesbare Nachricht. Auf einen Fehler klicken, um zur betreffenden Zeile zu springen. Kein Upload, keine Anmeldung.
Was ist der Unterschied zwischen JSON Schema-Validierung und JSON-Syntaxprüfung?
Die JSON-Syntaxprüfung bestätigt nur, dass das Dokument parsebar ist — keine zusätzlichen Kommas, keine fehlenden Klammern. Das übernimmt der JSON Formatierer. JSON Schema-Validierung läuft nach dem Parsen und prüft, ob die geparste Struktur dem Vertrag entspricht: required-Felder vorhanden, Typen korrekt, Werte im erlaubten Bereich. Üblicherweise führen Sie beides aus — erst formatieren, um Parsbarkeit zu bestätigen, dann gegen das Schema validieren.
Warum lehnt mein Schema JSON ab, das korrekt aussieht?
Fünf typische Ursachen: (1) additionalProperties: false — Ihre Daten enthalten einen Schlüssel, den das Schema nicht deklariert hat, oft ein Tippfehler oder ein neues Feld; (2) type: "integer" vs "number" — JSON Schema behandelt 1.0 als number, nicht als integer; (3) format-Keywords (email, uri, uuid) lehnen schlecht geformte Strings ab, auch wenn sie in Ordnung wirken; (4) required auf der falschen Verschachtelungsebene — required muss neben properties stehen, nicht darin; (5) das JSON enthält einen String "42", wo das Schema integer 42 erwartet. Der Fehlerpfad zeigt an, welcher Punkt es ist.
Werden $ref und Remote-Schema-Referenzen unterstützt?
Interne $ref-Pointer (#/$defs/foo, #/properties/bar) funktionieren sofort. Remote-$ref auf externe URLs ist bewusst deaktiviert — externe Schemas zu laden würde Ihre Validierungsaktivität an Dritte weitergeben und das Datenschutzmodell brechen. Um gegen ein mehrteiliges Schema zu validieren, betten Sie die referenzierten Definitionen über $defs in ein einzelnes Dokument ein, oder führen Sie die Validierung in Ihrer eigenen CI mit Ajv aus, wo Remote-Refs angemessen sind.
Was bewirkt additionalProperties: false?
additionalProperties: false lehnt jeden Schlüssel ab, der nicht in properties deklariert ist. Es ist das einzige nützlichste Keyword zum Verschärfen von Verträgen — ohne es sind Schemas standardmäßig offen und akzeptieren stillschweigend falsch geschriebene oder bösartige Felder. Setzen Sie additionalProperties: false immer auf Eingabeverträge (Request-Bodies, Konfigurationsdateien, Queue-Nachrichten). Lassen Sie es nur auf true (oder weglassen), wenn das Schema eine Teilbeschreibung eines größeren Dokuments ist.
Wie validiere ich JSON gegen ein Schema in Node.js oder Python?
Node: Ajv installieren (npm i ajv ajv-formats), new Ajv().compile(schema) aufrufen, dann validate(data). Python: jsonschema installieren (pip install jsonschema), jsonschema.validate(data, schema) aufrufen. Für TypeScript Typen aus dem Schema mit json-schema-to-typescript generieren, damit Compile- und Laufzeit synchron bleiben. Unser Leitfaden zur JSON Schema-Validierung bietet Copy-Paste-Rezepte für Node, Python und Browser.
Was ist der Unterschied zwischen oneOf, anyOf und allOf?
allOf — muss jedem Subschema entsprechen (Schnittmenge, für Komposition). anyOf — muss mindestens einem entsprechen (Vereinigung, mit Fast-Fail). oneOf — muss genau einem entsprechen (diskriminierte Union, langsamer aber strikter). Verwenden Sie oneOf für diskriminierte Unions wie Webhook-Events mit type-Tag; anyOf für permissive Unions; allOf, um ein Basisschema mit zusätzlichen Einschränkungen zu erweitern. oneOf ist am langsamsten, weil jeder Zweig getestet wird — bevorzugen Sie anyOf, wenn 'genau einer' nicht erforderlich ist.
Werden OpenAPI-Schemata unterstützt?
OpenAPI 3.1 verwendet nativ Draft 2020-12, daher lässt sich jede OpenAPI 3.1 Schema-Komponente direkt einfügen. OpenAPI 3.0 verwendet eine Draft 4-Teilmenge, die weitgehend kompatibel ist — Sie können auf Sonderfälle rund um nullable: true (3.0-Syntax) stoßen, was Draft 2020-12 als type: ["string", "null"] ausdrückt. Für die vollständige Validierung eines OpenAPI-Dokuments (paths, operations, security) verwenden Sie einen dedizierten OpenAPI-Linter wie Spectral; dieses Tool fokussiert auf den Schema-Anteil.
Warum sagt der Validator, mein JSON Schema selbst sei ungültig?
JSON Schema ist ein JSON-Dokument, das gültiges JSON sein muss, bevor es ein gültiges Schema sein kann. Häufige Ursachen: abschließendes Komma in einem properties-Objekt, einfache statt doppelte Anführungszeichen, $schema auf eine nicht existierende Draft-URL gesetzt, oder required als String statt als Array aufgeführt. Das Schema zuerst im JSON Formatierer formatieren, um Syntaxfehler aufzudecken, dann hier zur semantischen Validierung wieder einfügen.
Sendet das Tool meine JSON-Daten oder das Schema an einen Server?
Nein. Das gesamte Parsen und Validieren läuft lokal in Ihrem Browser. Ihre JSON-Daten, Ihr Schema und das Validierungsergebnis verlassen Ihre Maschine niemals — kein Upload, kein localStorage der Eingaben, keine Analyse dessen, was Sie einfügen. Sicher für proprietäre API-Verträge, interne Konfigurationsdateien und sensible Payloads. Nur Ihre Draft-Auswahl wird im localStorage persistiert, damit sie ein Refresh überlebt; Browserdaten löschen, um sie zu entfernen.
Kann ich JSON Lines (NDJSON) oder mehrere Dokumente validieren?
Dieses Tool validiert ein Dokument pro Lauf. Für JSON Lines validieren Sie jede Zeile einzeln oder verwenden Ajv in Node mit einem Schema und einem Stream-Parser wie JSONStream. Für die Batch-Validierung großer Datensätze ist die Kommandozeile vorzuziehen — ajv-cli oder check-jsonschema (Python) verarbeiten Tausende Dateien pro Sekunde mit nur einer Schema-Kompilierung.

Verwandte Werkzeuge

Alle Werkzeuge anzeigen →