Zum Inhalt springen

JSON-Schema-Generator

Fügen Sie ein oder mehrere Beispiel-JSON-Dokumente ein; das Werkzeug leitet Typen, Pflichtfelder, verschachtelte Objekte und Arrays ab und schreibt ein Schema nach Draft 2020-12. Es erkennt die Formate Datum, E-Mail, URI und UUID, schlägt für wenige wiederkehrende Zeichenketten ein enum vor und prüft das erzeugte Schema automatisch gegen Ihre Beispiele.

Kostenloses Werkzeug · Integration

Fügen Sie ein einzelnes Objekt, ein Array oder mehrere Beispiele ein. Für mehrere Beispiele verwenden Sie ein Array (jedes Element ist ein Beispiel) oder ein JSON-Dokument pro Zeile; je mehr Beispiele, desto besser die Trennung in Pflicht- und optionale Felder.

Das Schema wird in Ihrem Browser erzeugt; Ihre Beispiel-JSONs werden nirgendwohin gesendet oder gespeichert.

Optionen

Array an der Wurzel

Ist die Wurzel ein Array: Wird jedes Element als Beispiel gezählt, wird das Schema zum Schema eines Elements; als ein Dokument gezählt, entsteht das Schema des Arrays selbst.

Pflichtfelder (required)

Mehrere Typen

0 = aus. Wird nur vorgeschlagen, wenn sich Werte in den Beispielen wiederholen (jeder Wert im Mittel mindestens zweimal).

Einrückung

Erzeugtes Schema

Fügen Sie Beispiel-JSON ein oder laden Sie das Beispiel.

Das erzeugte Schema ist ein Entwurf als Ausgangspunkt: Es beschreibt nur, was die Beispiele zeigten. Ungesehene Werte, Bereichsgrenzen (minimum, maxLength), Muster und Geschäftsregeln fehlen; ein enum-Vorschlag schließt gültige, aber ungesehene Werte aus, und die Formaterkennung ist heuristisch. Prüfen und korrigieren Sie das Schema anhand der echten Regeln Ihrer Systeme und verwenden Sie es dann mit einem Validator Ihres Stacks (z. B. Ajv, jsonschema).

Möchten Sie die Datenverträge zwischen Ihren Systemen (Schema, Versionierung, Validierung und Fehlerbehandlung) gemeinsam entwerfen?

Gespräch anfragen

01

So geht's

  1. A

    Fügen Sie ein oder mehrere Beispiel-JSON-Dokumente ein (ein Array oder ein Dokument pro Zeile); je mehr und je vielfältiger die Beispiele, desto besser das Schema.

  2. B

    Stellen Sie Pflichtfelder, mehrere Typen, Formaterkennung, die enum-Schwelle und additionalProperties ein; das Schema aktualisiert sich sofort.

  3. C

    Kopieren oder laden Sie das Schema herunter. Die „Selbstprüfung“ zeigt, ob das Schema jedes Beispiel akzeptiert; arbeiten Sie das Schema danach anhand Ihrer echten Regeln durch.

02

Wie wird ein Schema aus Beispielen abgeleitet?

Das Werkzeug führt alle Beispiele in einer Struktur zusammen: Für jedes Feld zählt es, welche Typen wie oft gesehen wurden, in welchen Beispielen jedes Feld eines Objekts vorkommt und wie die Elemente von Arrays aussehen. Diese Zählung wird dann in JSON Schema übersetzt: properties und required für Objekte, items für Arrays, type für Werte.

Jede Zahl mit ganzzahligem Wert wird zu integer, und number wird geschrieben, wenn eine Bruchzahl gesehen wurde (number schließt integer ein). In JSON sind 1 und 1.0 dieselbe Zahl; der Parser unterscheidet sie nicht. Leere Arrays tragen keine Typinformation; das Elementschema stammt nur aus Arrays anderer Beispiele.

03

required, null und mehrere Typen

Standardmäßig ist ein Feld Pflicht, wenn es in jedem Beispiel vorkommt, in dem das Objekt auftritt; fehlt es auch nur einmal, bleibt es optional. Deshalb macht ein einzelnes Beispiel jedes Feld zum Pflichtfeld: Um zu sehen, dass ein Feld optional ist, braucht es ein Beispiel ohne dieses Feld. Wird ein null-Wert gesehen, kommt null in die Typliste ("type": ["string", "null"]); ein gänzlich fehlendes Feld ist etwas anderes und wird mit required ausgedrückt.

Werden an derselben Stelle mehrere Typen gesehen, gibt es zwei Schreibweisen: ein type-Array (kurz; properties, items und format gelten nur für den jeweiligen Typ) oder anyOf (jeder Typ ein eigenes Schema). Arrays gelten als Listen, nicht als Tupel: Alle Elemente fließen in ein einziges items-Schema.

04

Das erzeugte Schema prüfen

Beispiele beschreiben nur, was Sie gesehen haben. An drei Stellen ist besondere Vorsicht geboten: Ein enum-Vorschlag wird nur für wenige wiederkehrende Textwerte gemacht, aber Sie wissen, ob diese Werte wirklich eine geschlossene Menge sind; format wird nur eingetragen, wenn alle Zeichenketten an dieser Stelle zum selben Format passen, und ist heuristisch; additionalProperties: false bricht, wenn die Gegenseite später ein Feld hinzufügt.

Das Werkzeug prüft das erzeugte Schema mit dem JSON-Schema-Validator gegen jedes Beispiel. So können Sie sicher sein, dass das Schema Ihre Beispiele akzeptiert (Sie sehen es, wenn eine Option wie „Jedes gesehene Feld“ Beispiele ausschließt), aber es beweist nicht, dass das Schema Ihre Geschäftsregeln richtig ausdrückt.

Häufige Fragen

Reicht ein einzelnes Beispiel?
Es entsteht ein Schema, aber ein schwaches. In einem Beispiel wirkt jedes Feld wie ein Pflichtfeld, jeder Typ wie der einzige Typ, und null oder anders typisierte Werte werden nicht gesehen. Geben Sie so viele und so unterschiedliche Beispiele wie möglich: mit fehlendem Feld, mit null, mit leeren Arrays und mit Extremwerten.
Warum weicht die required-Liste von meiner Erwartung ab?
Standardmäßig sind nur Felder Pflicht, die in jedem Beispiel vorkommen, in dem das Objekt auftritt. Felder, die in Ihrem Vertrag Pflicht, in Ihren Beispielen aber immer gefüllt sind, kommen ohnehin als Pflicht heraus; was optional sein soll, können Sie nur mit einem Beispiel ohne dieses Feld vermitteln. Setzen Sie die Option bei Bedarf auf „Keine“ und tragen Sie die Pflichtfelder von Hand ein.
Kann ich den Format- und enum-Vorschlägen vertrauen?
Als Entwurf. format wird nur eingetragen, wenn alle Zeichenketten an dieser Stelle zu date-time, date, uuid, E-Mail oder URI passen; ein einzelnes Beispiel kann diese Regel zufällig erfüllen. enum wird nur für wenige wiederkehrende Werte vorgeschlagen und schließt gültige, aber ungesehene Werte aus; behalten Sie es, wenn es wirklich eine geschlossene Menge ist, sonst löschen Sie es.
Was passiert, wenn ein Feld sowohl als Ganzzahl als auch als Bruchzahl ankommt?
Es wird number geschrieben; in JSON Schema schließt number integer ein. Werden nur ganze Zahlen gesehen, wird integer geschrieben. Ein Wert wie 1.0 ist in JSON dieselbe Zahl wie 1 und zählt als Ganzzahl; liefern Sie ein Feld, das Bruchzahlen erwarten lässt, nur mit Beispielen mit 1, 2, 3, entsteht integer.
Wann ist additionalProperties: false richtig?
Wenn Sie genau festlegen, welche Felder die Gegenseite senden darf (eigene API, Importdatei). Prüfen Sie die Antwort eines anderen Systems, ist es meist falsch: Ihre Validierung bricht, sobald dieses System ein neues Feld hinzufügt. Standardmäßig ist es aus, das heißt, unbekannte Felder sind erlaubt.
Was, wenn die Elemente eines Arrays unterschiedliche Typen haben?
Sie fließen alle in ein einziges items-Schema: Enthalten die Elemente Text und Zahlen, erhält items "type": ["integer", "string"] (oder anyOf). Positionsabhängige (Tupel-)Arrays werden nicht abgeleitet; dafür müssen Sie prefixItems von Hand schreiben.

Entwerfen wir Ihre Datenverträge gemeinsam

Wir entwerfen Schemas, Versionierung und Fehlerbehandlung für die Datenflüsse zwischen CRM-, ERP- und Drittsystemen. Besprechen wir Ihren bestehenden Ablauf in einem kostenlosen Erstgespräch.