Utilia

JSON-Schema-Validator

JSON-Dokument im Browser gegen ein JSON Schema validieren. Jeder Fehler wird mit Instanzpfad, Schlüsselwort und Schemapfad aufgelistet.

So validieren Sie JSON gegen ein Schema

  1. Fügen Sie Ihr Schema in „JSON Schema“ und Ihre Daten in „JSON-Dokument“ ein oder wählen Sie einen fertigen Fall unter „Beispiel“.
  2. Lassen Sie „Draft“ auf „Automatisch ($schema)“, damit die im $schema des Schemas angegebene Version verwendet wird, oder erzwingen Sie Draft 4, 7, 2019-09 oder 2020-12.
  3. Die Validierung läuft bereits während der Eingabe; „Validieren“ startet sie erneut. „Beide formatieren“ rückt die beiden Texte neu ein.
  4. Lesen Sie das Ergebnis: eine grüne Zeile, wenn das Dokument gültig ist, sonst eine Fehlertabelle.

Die Fehlertabelle lesen

Jede Zeile steht für eine verletzte Regel:

  • Instanzpfad ist ein JSON Pointer auf den Wert, der die Prüfung nicht bestanden hat. /roles/1 ist das zweite Element von roles, „(Wurzel)“ ist das gesamte Dokument.
  • Schlüsselwort ist die verletzte Schemaregel: type, required, minimum, pattern, format, additionalProperties und so weiter.
  • Meldung erklärt den Fehler, zum Beispiel 0 is less than 1. Die Meldungen des Validators sind auf Englisch.
  • Schemapfad zeigt auf das Schlüsselwort im Schema, etwa /properties/id/minimum, damit Sie die Regel schnell finden.

Die Validierung bricht nicht beim ersten Problem ab: Alle Fehler werden aufgelistet. Scheitert eine Objekteigenschaft, meldet der Validator zuerst eine Zusammenfassung („Property “id” does not match schema“) und danach den genauen Grund. „Nur die genauesten Fehler anzeigen“ blendet diese Zusammenfassungen aus; deaktivieren Sie die Option, um die ganze Kette zu sehen. Fehler unter anyOf und oneOf bleiben immer zusammen mit den genauen Fehlern jedes Zweigs stehen, weil sie nur gemeinsam Sinn ergeben.

Was unterstützt wird

  • Drafts: 4, 6 (geprüft mit den Regeln von Draft 7), 7, 2019-09 und 2020-12, einschließlich $defs/definitions, lokalem $ref, if/then/else, dependentRequired, dependentSchemas, prefixItems, unevaluatedProperties und unevaluatedItems.
  • Formate: date, time, date-time, duration, email, hostname, ipv4, ipv6, uri, uri-reference, uri-template, uuid, regex, json-pointer und relative-json-pointer werden geprüft. Unbekannte Formate werden ignoriert, wie es die Spezifikation erlaubt.
  • Referenzen: $ref darf auf jede Stelle im Schema zeigen, auch auf eine dort deklarierte $id. Entfernte Schemas werden nie heruntergeladen; ein Verweis auf eine andere URL wird als nicht auflösbar gemeldet.

Dieses Tool validiert Dokumente gegen Ihr Schema. Ob das Schema selbst dem Metaschema entspricht, prüft es nicht. Es warnt aber vor unbekannten type-Namen wie "strin" oder "int" – ein häufiger Tippfehler, den Validatoren sonst stillschweigend übergehen.

Die Beispiele

  • Benutzerprofil (2020-12): required, Zeichenkettenlängen, format: email, ein enum in items, uniqueItems und additionalProperties: false.
  • Produktliste mit $ref (draft-07): ein Array, dessen Elemente auf #/definitions/product verweisen, mit einem pattern für die Artikelnummer (SKU) und einem Preis mit exclusiveMinimum.
  • Konfiguration mit if/then (2019-09): ein Zertifikat, das nur im HTTPS-Modus Pflicht ist, ein oneOf zwischen E-Mail und URI sowie Zahlengrenzen.

Zu jedem Beispiel gehört ein Dokument mit absichtlichen Fehlern, damit Sie sehen, wie die Fehlermeldungen aussehen.

Häufige Fragen

Werden meine Daten hochgeladen?

Nein. Schema und Dokument werden in Ihrem Browser validiert, es wird nichts an einen Server gesendet.

Warum ist das $ref meines Schemas „unresolved“?

Der Validator kennt nur das Schema, das Sie eingefügt haben. Einem $ref auf eine andere Datei oder URL kann er nicht folgen. Kopieren Sie die referenzierten Definitionen in $defs und verweisen Sie stattdessen auf #/$defs/….

Welchen Draft sollte ich verwenden?

Den, auf den Ihr Projekt ausgelegt ist – und deklarieren Sie ihn mit $schema. Für neue Schemas ist 2020-12 die aktuelle Version; auch OpenAPI 3.1 verwendet sie.

Warum lehnt integer den Wert 2.0 ab?

Das tut es nicht: JSON Schema behandelt 2.0 als Ganzzahl, weil der Wert ganzzahlig ist. 2.5 dagegen besteht "type": "integer" nicht.

Funktioniert das Tool offline?

Ja. Sobald die Seite geladen ist und Sie eine erste Validierung durchgeführt haben (dabei wird der Validator geladen), ist keine Verbindung mehr nötig.