JSON-Schema-Validator
JSONValidiert JSON gegen ein JSON Schema (Draft-07 / 2019-09 / 2020-12) mit feldweisen Verletzungen oder leitet ein Schema aus einem Beispiel ab.
Remote-URLs werden nicht abgerufen; fügen Sie Ihr JSON direkt ein.
Auf dieser Seite
Was ist ein JSON-Schema-Werkzeug?#
Ein JSON-Wert allein sagt Ihnen, was die Daten sind — ein String hier, eine Zahl dort. Er sagt Ihnen nicht, was die Daten sein sollten: ob age eine nicht-negative Ganzzahl sein muss, ob email erforderlich ist, ob tags leer sein darf. JSON Schema ist das Vokabular, um diese Dinge auszudrücken. Sie schreiben ein Schema — ein kleines JSON-Dokument, das eine Form beschreibt — und ein Validator prüft Feld für Feld, ob ein Stück Daten in diese Form passt.
Diese Seite erledigt zwei Aufgaben mit einer Schema-Engine. Validieren nimmt ein Schema und ein Daten-Dokument und sagt Ihnen genau, welche Felder gegen welche Regeln verstoßen, jedes an seinen Pfad im Dokument gepinnt. Ableiten geht den anderen Weg: Geben Sie ihm einen JSON-Beispielwert und er schreibt für Sie ein Schema im Draft-07-Stil, indem er die Struktur durchwandert und den Typ jedes Felds aufzeichnet. Beide ergänzen sich natürlich — leiten Sie ein Schema aus einer repräsentativen Probe ab und validieren Sie dann jedes zukünftige Dokument dagegen.
Die Validierung läuft auf derselben Ajv-Engine, die auch Produktionscode verwendet, mit drei wählbaren Drafts (Draft-07, 2019-09, 2020-12) und gelockertem Strict-Mode-Schutz, sodass ein leicht nicht-strenges Schema toleriert statt rundweg abgelehnt wird.
Verwendung#
- Wählen Sie einen Modus am Werkzeugleisten-Umschalter:
- Validieren (Standard): fügen Sie Ihr Schema links ein, Ihre Daten rechts.
- Ableiten: fügen Sie einen JSON-Beispielwert links ein, lesen Sie das erzeugte Schema rechts.
- Wählen Sie im Modus Validieren den Draft, gegen den das Schema geschrieben ist — Draft-07 deckt die große Mehrheit der vorkommenden Schemata ab; wählen Sie 2019-09 oder 2020-12 nur, wenn Ihr Schema Funktionen nutzt, die diese Drafts einführten.
- Wählen Sie eine Einrückung für die Ausgabe — 2 oder 4 Leerzeichen. Im Modus Ableiten steuert dies die Formatierung des erzeugten Schemas.
- Die rechte Fläche zeigt entweder das Daten-Dokument (Validieren) oder das abgeleitete Schema (Ableiten). Die Flächenbeschriftungen wechseln passend zum Modus.
- Im Modus Validieren listet das Panel Verletzungen unter den Flächen jeden Verstoß als
Pfad — Grund. Die Wurzel des Dokuments wird als(root)gezeigt; ein verschachteltes Feld erscheint als sein JSON-Pointer, etwa/age. - Klicken Sie auf Kopieren in der rechten Fläche, um das abgeleitete Schema oder die Daten zu übernehmen, oder auf Beispiel / Leeren, um zu laden oder zurückzusetzen.
Die Ergebnisse werden berechnet, sobald beide Eingaben parsebar sind. Ein Schema- oder Daten-Syntaxfehler wird mit seiner genauen Zeile und Spalte gemeldet, markiert als Schema-, Daten- oder Kompilierungsproblem, sodass Sie wissen, wo Sie suchen müssen.
Eckpunkte#
- Zwei Modi, eine Engine. Dokumente validieren oder ein Schema aus einer Probe erzeugen, mit demselben bewährten Validator darunter.
- Drei Drafts. Draft-07, 2019-09 und 2020-12 laden jeweils nur ihren eigenen kompilierten Validator, sodass Sie immer gegen den Draft validieren, den Sie tatsächlich anzielen.
- Alle Fehler, nicht nur der erste. Jede Verletzung wird gesammelt, sodass ein Dokument mit fünf Problemen fünf Probleme zeigt, anstatt fünf Round-Trips zu erzwingen.
- Pfad-gepinnte Verletzungen. Jeder Verstoß zeigt auf seine Position im Dokument —
(root)für dokumentweite Probleme oder ein präziser Pointer wie/user/address/zip. - Strict-Mode gelockert. Ein Schema mit einem unbekannten Schlüsselwort oder einem fehlenden Typ der obersten Stufe wird toleriert und ausgeführt, statt zur Kompilierzeit abgelehnt zu werden — das richtige Verhalten für ein Werkzeug, dessen Aufgabe Prüfen ist, nicht Belehren.
- Nur lokal. Schemata und Daten werden in Ihrem Browser verarbeitet. Nichts wird hochgeladen.
Konkretes Beispiel#
Ein user-Objekt muss einen name haben, und age muss eine nicht-negative Ganzzahl sein. Fügen Sie dieses Schema im Modus Validieren links ein:
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name"]
}
Testen Sie nun ein Dokument, das beide Regeln bricht — name fehlt und ein negatives age:
{
"age": -3
}
Das Verletzungs-Panel meldet zwei Verstöße, jeder markiert, wo er geschah:
(root) — must have required property 'name'
/age — must be >= 0
Der Pfad (root) sagt Ihnen, dass die fehlende erforderliche Eigenschaft ein Problem auf Dokumentebene ist; /age zeigt direkt auf das fehlerhafte Feld. Korrigieren Sie die Daten zu {"name":"ada","age":36} und der Status wechselt zu gültig mit leerer Verletzungsliste. Der Grundtext ist Ajvs eigener Schlüsselwort-Wortlaut, unverändert belassen, sodass er übereinstimmt, was Ihre Produktions-Logs sagen werden.
FAQ#
Draft-07, 2019-09 oder 2020-12 — was soll ich wählen?#
Draft-07 ist der pragmatische Standard: die überwältigende Mehrheit der Schemata in Tutorials, Bibliotheken und OpenAPI-Specs zielt darauf ab, und alles, was Sie wahrscheinlich brauchen (type, properties, required, minimum, format, $ref), funktioniert dort. Wechseln Sie zu 2019-09 oder 2020-12 nur, wenn Ihr Schema ausdrücklich Funktionen dieser Drafts nutzt — etwa unevaluatedProperties oder das überarbeitete $ref-Verhalten. Die Wahl des falschen Drafts funktioniert meist noch, aber die sichere Wahl ist der Draft, den der Schema-Autor beabsichtigt hat.
Warum sind die Verletzungs-Meldungen auf Englisch?#
Es ist Ajvs eigener Grundtext für jedes Schlüsselwort (must have required property, must be >= 0 und so weiter), unverändert weitergereicht. Der Punkt ist Konsistenz: Das sind exakt die Strings, die Ihre serverseitige Validierung protokollieren wird, sodass sie hier zu matchen eine Abweichung in der Produktion trivial greifbar macht.
Was bedeutet „Strict-Mode gelockert“?#
Ajvs Strict-Mode lehnt Schemata ab, die er für schlampig hält — ein unbekanntes Schlüsselwort, ein $ref, das er nicht auflösen kann, ein fehlender type. Das ist in einer Build-Pipeline nützlich, aber falsch für ein Validator-Werkzeug, dessen Aufgabe es ist, Daten gegen beliebige Schemata zu prüfen, die man ihm übergibt. Diese Seite schaltet den Strict-Mode ab, sodass ein nicht-strenges Schema kompiliert und läuft, statt eine Exception zu werfen.
Kann ich ein Schema ableiten und danach dagegen validieren?#
Ja — das ist der vorgesehene Round-Trip. Fügen Sie eine repräsentative Probe im Modus Ableiten ein, kopieren Sie das erzeugte Schema, schalten Sie zu Validieren und fügen Sie das Schema wieder links ein. Das abgeleitete Schema revalidiert die ursprüngliche Probe sauber, und von da an können Sie jedes neue Dokument dagegen prüfen.