JSON Schema Generator
Automatisch standardkonforme JSON Schema-Definitionen aus JSON-Daten generieren
// JSON Schema wird automatisch generiertWas ist JSON Schema?
JSON Schema ist eine Spezifikation zur Beschreibung und Validierung von JSON-Datenstrukturen. Es definiert Regeln für Struktur, Datentypen, Einschränkungen und wird weit verbreitet für API-Validierung, Formularvalidierung, Konfigurationsdatei-Überprüfung verwendet.
Mit JSON Schema können Sie:
- Datenvalidierung: Überprüfen ob JSON-Daten dem erwarteten Format und Einschränkungen entsprechen
- Dokumentationsgenerierung: Automatisch API-Dokumentation und Typdefinitionen generieren
- Code-Intelligenz: Intelligente Vervollständigung und Typprüfung in IDEs erhalten
- Automatisierte Tests:: Automatische Validierung von Antwortdatenformat in Tests
Dieses Tool unterstützt die JSON Schema Draft-07-Spezifikation und leitet intelligent verschachtelte Objekte, Array-Typen, Enum-Werte und andere komplexe Strukturen ab.
Besonders bei produktiven Daten oder Codebasen sollte das Ergebnis anschließend mit Parser, Tests oder Projektregeln geprüft werden.
Anleitung
So geht's
- JSON-Daten in das linke Eingabefeld einfügen oder auf 'Beispiel' klicken, um Beispieldaten zu laden
- Optionen konfigurieren: Schema-ID festlegen, auswählen, ob alle Felder erforderlich sein sollen, Standardwerte hinzufügen usw.
- Die entsprechende JSON-Schema-Definition wird automatisch auf der rechten Seite erzeugt
- Auf 'Kopieren' klicken, um das generierte Schema in die Zwischenablage zu kopieren
- Das Schema für API-Validierung, Formularvalidierung oder Konfigurationsdatei-Prüfung verwenden
Hinweise zum Schema
- Generierte Schemas spiegeln das bereitgestellte Beispiel-JSON wider. Fügen Sie daher repräsentative optionale Felder, Nullwerte, Arrays und Sonderfälle ein, bevor Sie das Ergebnis kopieren.
- Überprüfen Sie Pflichtfelder sowie Zahlen- und Zeichenketten-Formate manuell – die beispielbasierte Erkennung kann Ihre Geschäftsregeln nicht immer kennen.
Anwendungsfälle
Technisches Prinzip
JSON Schema ist ein deklaratives Vokabular zur Annotation und Validierung von JSON-Dokumenten, definiert über mehrere IETF-Entwürfe (Draft 4 / 6 / 7 / 2019-09 / 2020-12). Der neueste ist Draft 2020-12, der sieben primitive Typen (string, number, integer, boolean, array, object, null), ein offenes Formatvokabular (email, uri, date-time, uuid, ipv4, hostname, ...) und Dutzende von Einschränkungs-Keywords definiert: pattern (Regex), minimum/maximum/exclusiveMinimum/exclusiveMaximum (Zahlenbereich), minLength/maxLength (Stringlänge), minItems/maxItems/uniqueItems (Array-Einschränkungen), required (Pflicht-Array auf Objektebene), additionalProperties (ob zusätzliche Felder erlaubt sind), enum und const (erlaubte Werte) sowie $ref (Wiederverwendung von Subschemas). Die Seite erzeugt standardmäßig Draft-2020-12-Ausgabe, wobei der ältere Draft-07 (nach wie vor der häufigste in Produktions-Schemas) über das Dropdown auswählbar ist. Die Inferenz des Generators ist ein einzelner Durchlauf über das benutzerseitig bereitgestellte JSON, der rekursiv ein Schema-Objekt aufbaut. Die Zuordnung im Kern der Inferenz ist: integer (Number.isInteger und kein Nachkommenteil) -> {type: 'integer'}, float -> {type: 'number'}, string -> {type: 'string'}, boolean -> {type: 'boolean'}, array -> {type: 'array', items: <Rekursion über das erste Element>} oder {type: 'array', prefixItems: [...]} für Tupel in Draft 2020-12, object -> {type: 'object', properties: <Rekursion über jeden Key>}, null -> {type: 'null'}. Für Arrays mit gemischten Elementtypen gibt der Generator eine oneOf-Subschema aus, die jeden beobachteten Typ abdeckt. Für mehrere Beispielelemente vergleicht der Generator diese, um die required-Liste zusammenzustellen: Ein Key ist erforderlich, wenn er in jedem Beispiel vorhanden ist, optional, wenn ein Beispiel ihn weglässt. Muster und Einschränkungen werden abgeleitet, wenn sich die Beispiele häufen: Wenn alle Zahlen in einem Feld im Bereich [1, 100] liegen, gibt der Generator {type: 'integer', minimum: 1, maximum: 100} aus; wenn ein Stringfeld immer eine UUID ist, markiert der Generator es mit format: 'uuid' und gibt ein pattern: '^[0-9a-f]{8}-...'-Regex aus. Die Enum-Heuristik greift, wenn ein Stringfeld über die Beispiele hinweg <= 10 verschiedene Werte annimmt (z. B. role: 'admin' | 'editor' | 'viewer' alles beobachtet), in diesem Fall gibt der Generator ein Enum-Array aus. Tief verschachtelte Objekte und rekursive Strukturen werden in einen $defs-Abschnitt extrahiert (Draft 2020-12; das ältere $definitions ist das Draft-07-Keyword) und per $ref referenziert. Rekursive Strukturen – z. B. ein Baumknoten mit einem 'children'-Feld vom Typ Baumknoten – erhalten einen Stub-$ref, der auf den $defs-Eintrag des Elternknotens zeigt, den der Validator zur Validierungszeit auflöst. Der Generator wählt das richtige Ref-vs.-Inline-Trade-off automatisch: flache Schemas bleiben inline, tiefe werden in Definitionen zerlegt, um die Ausgabe lesbar zu halten. Generierte Schemas sind deterministisch für eine gegebene Eingabe: dieselben JSON-Beispiele erzeugen stets dasselbe Schema, und der Generator ist in reinem JavaScript ohne Remote-Aufrufe implementiert.
- Typinferenz-Regeln: Integer-Zahlen -> integer, Gleitkomma -> number, Strings -> string, Booleans -> boolean, Arrays -> array + items, Objekte -> object + properties. JSON null -> type: null (Draft 6+) oder type: 'null'-String.
- Pflichtfeld-Erkennung: Vergleich aller Beispielelemente – Felder, die in jedem Objekt vorhanden sind, werden als erforderlich behandelt und zum required-Array hinzugefügt; fehlende sind optional. Einzelbeispiel-Eingabe lässt required: [] leer, da die Heuristik mindestens zwei Beispiele benötigt.
- Enum-Inferenz-Heuristik: Wenn ein Feld über die Beispiele hinweg eine kleine endliche Menge verschiedener String-Werte annimmt (Kardinalität <= 10), wird es automatisch als Enum-Einschränkung erkannt. Größere Kardinalitäten bleiben als einfacher String-Typ.
- Automatisch erkanntes Format: Basierend auf String-Signaturen werden Felder mit Format-Hinweisen wie email, uri, date-time, uuid für Dokumentation und Validierung markiert. Das Format-Keyword ist in Draft 2020-12 informativ – Validator können wählen, ob sie es durchsetzen oder ignorieren.
- Verschachtelte $ref-Extraktion: Tief verschachtelte Objekte werden in interne $defs extrahiert (Draft-2020-12-Keyword; das ältere $definitions stammt aus Draft 7) und per $ref referenziert, um das Schema nicht zu verbose werden zu lassen. Rekursive Strukturen erhalten einen Stub-$ref, der auf den $defs-Eintrag des Elternknotens zeigt.
- Einschränkungserweiterung: Neben Basistypen können auch minimum/maximum (Zahlenbereich), minLength/maxLength (Stringlänge), pattern (Regex) und ähnliche Einschränkungen hinzugefügt werden. Der Generator gibt diese aus, wenn sich Eingabebeispiele auf spezifische Werte häufen.
- Draft-Auswahl: 2020-12 (der neueste) ist der Standard und verwendet $defs; 2019-09 verwendet ebenfalls $defs; Draft-07 verwendet $definitions und ist das, was die meisten vorhandenen Werkzeuge noch ausgeben. Draft 6 führte die Strict-Required-Semantik ein, bei der Pflichtfelder im required-Array des Elternknotens statt als Geschwistereigenschaft aufgelistet werden.
- Kompositions-Keywords (Draft 2019-09+): allOf (muss allen Subschemas entsprechen), anyOf (mindestens eines), oneOf (genau eines), not (darf nicht entsprechen). Der Generator wählt oneOf, wenn Beispiele in zwei disjunkte Subschemas passen (z. B. integer vs. string).
Beispiele
Einfaches Objekt -> Schema
{"name": "Alice", "age": 25}
->
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "age"]
}Schema mit Array
{"tags": ["js", "ts"]}
->
{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" }
}
}
}Schema mit Enum
{"role": "admin"}
->
{
"type": "object",
"properties": {
"role": { "type": "string", "enum": ["admin", "user", "guest"] }
}
}FAQ
Was ist JSON Schema?
JSON Schema (aktuell Draft 2020-12) ist ein Vokabular zur Validierung von JSON-Dokumenten. Es beschreibt die erwartete Form eines Dokuments – welche Felder existieren, ihre Typen, Wertebereiche und Muster – ähnlich wie XML Schema oder TypeScript-Typen. Tools wie Ajv, Hyperjump und die meisten API-Frameworks nutzen es zur Laufzeitvalidierung.
Welchen JSON-Schema-Draft erzeugt der Generator?
Moderne Drafts (typisch 2020-12 oder draft-07). Die Ausgabe beginnt mit $schema zur Versionsangabe, $id wo sinnvoll, type sowie den passenden Schlüsselwörtern für Objekte, Arrays, Strings, Zahlen, Booleans und null. Wechsle den Draft, wenn dein Validator eine bestimmte ältere Version erwartet.
Wie leitet der Generator Typen aus einem JSON-Beispiel ab?
Er durchläuft das Beispiel und erfasst den Typ jeder Eigenschaft. Bei Arrays wird das items-Schema aus einem oder mehreren Elementen abgeleitet (bei unterschiedlichen Elementen als Vereinigung). Für gemischt typisierte Eigenschaften nutzt er oneOf oder anyOf. Das Ergebnis ist ein freizügiges Ausgangsschema; ziehe Einschränkungen (required, minLength, pattern) per Hand fester.
Werden alle Eigenschaften als required markiert?
Konfigurierbar. Standard ist, jede beobachtete Eigenschaft als required zu markieren. Schalte „alle optional“ um, falls dein Beispiel nur ein einzelner Datensatz ist und andere Instanzen Felder legitim weglassen können. Du kannst das required-Array nach der Generierung manuell bearbeiten.
Wie werden verschachtelte Objekte und Arrays behandelt?
Verschachtelte Objekte werden zu verschachtelten properties-Blöcken; Arrays werden zu items-Definitionen. Tiefe Verschachtelung ist kein Problem. Wenn dieselbe Form mehrfach auftritt, kannst du nachträglich mit $defs / $ref refaktorieren – der Generator dedupliziert nicht automatisch.
Was kann der Generator nicht ableiten?
Format-Constraints (date-time, email, uuid), Enum-Werte, Regex-Muster, minimum/maximum, minItems/maxItems und Abhängigkeiten musst du von Hand ergänzen, weil ein einzelnes Beispiel diese nicht zeigt. Nutze das generierte Schema als Skelett und ziehe es dann fester.
Wird mein JSON hochgeladen?
Nein. Die Inferenz läuft lokal. Eingefügtes JSON verlässt deinen Browser nicht.