JSON-Schema-Validator und Entwurfsgenerator

Fügen Sie Schema und Daten ein, um jede Abweichung zu sehen; Erzeugen macht aus einem Beispiel einen Schemaentwurf und weist nach, dass der Entwurf das Beispiel akzeptiert. Nichts verlässt den Browser.

Läuft lokal in deinem Browser
JSON Schema

Verwenden Sie ein JSON-Schema-Objekt; Verweise, die mit #/ beginnen, werden auf dieser Seite aufgelöst.

JSON-Daten

Fügen Sie zu validierende Daten oder ein repräsentatives Beispiel ein, um ein Ausgangsschema zu erzeugen.

Validierungsergebnis
Geben Sie ein JSON Schema und JSON-Daten ein und wählen Sie anschließend JSON validieren.

Prüfungen dieses lokalen Validators

Die Prüfung liest type, enum, const, allOf, anyOf, oneOf, not und if/then/else; properties, patternProperties, additionalProperties, propertyNames, required, dependentRequired, minProperties und maxProperties; items, prefixItems, additionalItems, minItems, maxItems, uniqueItems und contains; minLength, maxLength, pattern und die Formate email, uuid, date, time, date-time, uri, uri-reference, ipv4, ipv6 und hostname; minimum, maximum, exclusiveMinimum, exclusiveMaximum und multipleOf; dazu lokale $ref-Werte, auch Verweise, die durch die Daten rekursieren. Die Boolean-Form von exclusiveMinimum/exclusiveMaximum aus draft-04 und die Array-Form von items werden ebenfalls gelesen. Jedes andere Schlüsselwort und Format bleibt unangetastet; prüfen Sie Produktionsregeln mit einem konformen Validator.

Eine Nutzlast in diesem Tab gegen ihr Schema prüfen

Schema und Daten bleiben im Browser; nichts wird hochgeladen. Jedes Problem wird mit dem Pfad aufgelistet, an dem es gefunden wurde, die Liste endet nach 100 Problemen, und Erzeugen schreibt einen Schemaentwurf aus Ihrem Beispiel und prüft das Beispiel erneut dagegen.

JSON mit einem Schema prüfen

Fügen Sie ein JSON Schema und ein JSON-Dokument ein, um jede Stelle zu sehen, an der die Daten vom Schema abweichen. Die Prüfung läuft in diesem Tab: nichts wird hochgeladen, und die Seite arbeitet auch ohne Netzwerkverbindung weiter.

Erzeugen arbeitet andersherum. Es liest Ihr Beispiel, schreibt einen Schemaentwurf — Array-Elemente über alle Einträge zusammengeführt, required auf die Schlüssel begrenzt, die jedes Objekt mitbringt — und prüft das Beispiel gegen diesen Entwurf. Ein Entwurf, der sein eigenes Beispiel nicht beschreibt, wird also gemeldet statt still gespeichert.

  1. Fügen Sie das Schema in das Feld JSON Schema und das Dokument in das Feld JSON-Daten ein. Lokale Verweise wie #/$defs/address werden verfolgt; ein Verweis auf eine andere Datei wird als hier nicht unterstützt gemeldet.
  2. Wählen Sie JSON validieren. Jedes Problem wird mit dem Pfad angezeigt, an dem es gefunden wurde, zum Beispiel $.users[2].email, und mit der verletzten Regel. Die Liste endet nach 100 Problemen und sagt das auch.
  3. Wählen Sie Schema aus Daten erzeugen, um aus dem Beispiel einen Entwurf zu bauen. Der Entwurf ersetzt den Inhalt des Schemafelds, und das Beispiel wird sofort dagegen geprüft.
  4. Schema kopieren kopiert das Schemafeld, Beispiel laden füllt beide Felder mit einer kleinen API-Nutzlast, die durchläuft, und Leeren räumt beide Felder und das Ergebnis. Wenn Sie nach einem Ergebnis ein Feld ändern, wird das alte Urteil abgeblendet und Sie werden aufgefordert, erneut zu prüfen.

Was die Prüfung liest und was sie liegen lässt

Was die Prüfung liest

type, enum, const, allOf, anyOf, oneOf, not und if/then/else; properties, patternProperties, additionalProperties, propertyNames, required, dependentRequired, minProperties und maxProperties; items, prefixItems, additionalItems, minItems, maxItems, uniqueItems und contains; minimum, maximum, exclusiveMinimum, exclusiveMaximum und multipleOf; minLength, maxLength und pattern; dazu lokale $ref-Werte, auch Verweise, die durch die Daten rekursieren. Die Boolean-Form von exclusiveMinimum/exclusiveMaximum aus draft-04 und die Array-Form von items werden ebenfalls gelesen.

Die Formatprüfungen decken email, uuid, date, time, date-time, uri, uri-reference, ipv4, ipv6 und hostname ab. Ein Datum wie 2024-02-30 und eine Uhrzeit wie 99:99 werden abgelehnt, weil Kalender und Uhr geprüft werden, nicht nur die Form des Textes; jeder andere Formatname bleibt unangetastet. Die Spezifikation behandelt format als Annotation, diese Seite ist also strenger als ein reiner Leser.

Antworten ohne Abhängigkeit von der Schlüsselreihenfolge

enum, const und uniqueItems vergleichen Werte strukturell: {"a": 1, "b": 2} und {"b": 2, "a": 1} sind ein Wert, nicht zwei. Die vorherige Version dieses Werkzeugs verglich den JSON-Text und lag in beide Richtungen falsch: Sie lehnte einen gültigen enum-Wert ab und akzeptierte ein doppeltes Array-Element.

minLength und maxLength zählen Code-Punkte, ein als Surrogatpaar geschriebenes Emoji zählt also als ein Zeichen.

Schemaentwurf aus einem Beispiel

Array-Elemente werden über alle Einträge zusammengeführt: Ein gemischtes Array ergibt eine anyOf-Liste, Objekte werden Eigenschaft für Eigenschaft zusammengeführt, required bleibt auf die Schlüssel begrenzt, die jedes Objekt mitbringt. Ein leeres Objekt oder Array erzeugt keine leere required-Liste.

Zeichenketten, die wie eine UUID, eine E-Mail-Adresse, ein Datum, eine Zeitangabe oder ein URI aussehen, bekommen den passenden Formathinweis; der Entwurf ist damit nützlicher als ein bloßer Typ — brauchbar für einen ersten Durchlauf, nicht als Vertrag.

Grenzen

Die Problemliste endet bei 100 Einträgen. Verschachtelung tiefer als 4000 Ebenen bricht die Prüfung mit einer Meldung ab, statt den Browser zu stürzen, und ein zirkulärer #/-Verweis wird gemeldet statt endlos verfolgt.

Muster und Formate nutzen die RegExp-Engine des Browsers; 20.000 Array-Elemente oder Objekteigenschaften werden in etwa 20 ms geprüft.

Zuletzt verwendet: