JSON-Schema-Generator
Erzeugen Sie aus einer JSON-Probe automatisch ein JSON-Schema (Draft-07). Mit anpassbaren Optionen für Strenge, required-Felder und Beispiele.
Was ist JSON Schema?
JSON Schema ist ein Vokabular zur Beschreibung von JSON. Es sagt: „Dieses Objekt muss diese Schlüssel haben, mit diesen Typen und Werten, die zu diesen Mustern passen“ – und Validatoren (Ajv, jsonschema, opis/json-schema, jedes OpenAPI-Tool) erzwingen diesen Vertrag. Aktueller Standard ist Draft 2020-12, den auch OpenAPI 3.1 nutzt; Draft 7 ist die Vorgängerversion und in älteren Toolchains noch verbreitet. Die beiden unterscheiden sich nur in kleinen syntaktischen Details – dieser Generator gibt beide aus.
So funktioniert es
Füge ein JSON-Beispiel ein. Die Ausgabe liefert ein passendes Schema, in dem jedes Blatt als string, integer, number, boolean, null typisiert wird, plus object / array für Container. Mit aktivem Formate erkennen bekommen Strings, die gängigen Mustern entsprechen, einen format-Hinweis – email, uri, date, date-time, uuid, ipv4. Mit aktivem Required markieren wird jeder im Beispiel vorhandene Schlüssel zu required hinzugefügt – wirf ein Array mehrerer Objekte hinein, um eine ehrliche Required-Liste zu erhalten (nur Schlüssel, die in allen Objekten vorkommen, überleben). Optionale Felder Title und $id werden oben am Schema ergänzt.
Erkannte Formate
email– alles, was zum einfachen Musterlocal@host.tldpasst.uri– Strings, die mithttp://oderhttps://beginnen.date–YYYY-MM-DD(RFC 3339 full-date).date-time–YYYY-MM-DDTHH:MM:SS[.fff][Z|+HH:MM](RFC 3339).time–HH:MM:SS[.fff][Z|+HH:MM].uuid– RFC-4122-UUIDs v1–v5.ipv4– IPv4-Adressen in Punkt-Dezimal-Notation.
uri-reference, idn-email, regex, json-pointer) werden nicht automatisch erkannt; bei Bedarf manuell ergänzen.
Häufig gestellte Fragen
Sollte ich einem inferierten Schema in Produktion vertrauen?
Wie wählt das Tool die Required-Felder?
Worin unterscheiden sich Draft 2020-12 und Draft 7?
$dynamicRef ersetzt $recursiveRef, items ersetzt additionalItems für Tuple-Validierung, und einige Keywords sind zwischen Vokabularen umgezogen. Wenn du mit OpenAPI 3.1 oder Ajv 8+ integrierst, nimm 2020-12; für ältere Ajv-Versionen (v6), älteres Stoplight oder alles vor 2019 nimm Draft 7.Warum wird mein Datum als date-time und nicht als date erkannt?
date-time vor date, deshalb matcht 2024-01-15T00:00:00Z zuerst auf date-time. 2024-01-15 allein matcht auf date. Willst du ein reines Datumsfeld, bearbeite das Schema von Hand oder entferne den Zeitanteil aus dem Beispiel.Erkennt das Schema enum-artige Felder?
enum: [...] manuell, sobald du deine Domäne geprüft hast.Kann ich die Ausgabe mit OpenAPI verwenden?
$schema und $id) in einen components.schemas.MyType-Eintrag. OpenAPI 3.1 unterstützt das volle Draft-2020-12-Vokabular; OpenAPI 3.0 unterstützt eine Teilmenge nahe an Draft 7 – mit ein paar Eigenheiten (kein nullable-Keyword in Draft 7; OpenAPI 3.0 hat sein eigenes ergänzt).