JSON-Schema-Generator

JSON einfügen, um automatisch ein JSON-Schema zu erzeugen.

Keine Daten verlassen Ihr Gerät

Anleitung

  1. Fügen Sie ein JSON-Objekt oder -Array in das Eingabefeld ein.
  2. Optionen umschalten: „required"-Arrays oder „examples" aus Ihren Werten einbeziehen.
  3. Klicken Sie auf Schema erzeugen, um ein JSON-Schema (Draft 2020-12) zu erstellen.
  4. Kopieren oder Herunterladen Sie das erzeugte Schema.

Häufig gestellte Fragen

Welche JSON-Schema-Version wird erzeugt?

Der Generator gibt JSON Schema Draft 2020-12 aus (https://json-schema.org/draft/2020-12/schema), den neuesten stabilen Entwurf.

Werden verschachtelte Objekte und Arrays unterstützt?

Ja. Der Generator verarbeitet verschachtelte Objekte und Arrays rekursiv. Bei Arrays leitet er das Schema vom ersten Element ab.

Kann ich das erzeugte Schema bearbeiten?

Die Ausgabe ist ein Ausgangspunkt. Sie möchten eventuell Einschränkungen wie minLength, minimum, pattern oder enum je nach Bedarf hinzufügen.

Wofür JSON Schema da ist

JSON Schema ist eine deklarative Art zu beschreiben, wie ein JSON-Dokument aussehen soll: welche Eigenschaften es hat, welche Typen diese Eigenschaften tragen, was erforderlich vs. optional ist und welche Werte gültig sind. Es ist das JSON-Welt-Äquivalent zu XSD für XML oder einer Datenbanktabellen-Definition. Das offizielle Projekt lebt unter json-schema.org.

Wo du es in freier Wildbahn triffst:

Die Drafts, denen du in der Praxis begegnest

Die JSON-Schema-Spezifikation wurde als Reihe von Drafts veröffentlicht. Der aktuelle stabile Draft ist 2020-12 (laut offizieller Spec-Seite: «The current version is 2020-12»). Die Drafts, denen du begegnen könntest:

Im Zweifel: wähle den Draft, der zu deinem Validator passt. AJV (der populärste JavaScript-Validator) unterstützt mit explizitem Opt-in die Drafts 04, 06, 07, 2019-09 und 2020-12. jsonschema in Python tut dasselbe. Wenn du nicht weißt, was dein Downstream-Konsument will, ist 2020-12 ein sicherer Default für neue Arbeit.

Die eingebauten Typen

JSON Schema beschreibt sieben Basistypen, die den Wertarten von JSON entsprechen:

TypJSON-WertHäufige Schlüsselwörter
string"hello"minLength, maxLength, pattern, format
number42, 3.14minimum, maximum, exclusiveMinimum, multipleOf
integer42Untermenge von number; ohne Bruchteilkomponente.
booleantrue / falseKeine zusätzlichen Einschränkungen.
nullnullEigenständiger Typ; explizit, wenn Nulls gültig sind.
array[…]items, minItems, maxItems, uniqueItems
object{…}properties, required, additionalProperties

Kompositions-Schlüsselwörter erlauben das Mischen und Kombinieren: oneOf (genau eines), anyOf (mindestens eines), allOf (alle), not (das Gegenteil). Plus enum für eine endliche Liste erlaubter Werte und const für einen einzigen festen Wert.

Was ein automatisch erzeugtes Schema sagen kann und nicht

Ein Schema aus einem einzigen JSON-Beispiel zu inferieren ist mächtig, aber begrenzt. Der Generator kann erkennen:

Es kann nicht erkennen:

Behandle die Ausgabe als zu 70% fertigen Ausgangspunkt. Die wertvollen Ergänzungen (welche Felder tatsächlich erforderlich sind, welche String-Formate gelten, welche Wertbereiche erlaubt sind, was jedes Feld bedeutet) sind der Schritt der menschlichen Pflege.

Zwei subtile Fallen, die man kennen sollte

JSON Schema vs. Zod / Joi / Yup vs. TypeScript-Typen

Mehrere Technologien überschneiden sich mit der Rolle von JSON Schema; jede hat einen anderen Sweet Spot:

Wenn dein Schema von mehreren Sprachen oder von Tools (IDEs, OpenAPI-Tooling, Code-Generatoren) konsumiert werden muss, ist JSON Schema das richtige Zuhause. Wenn du innerhalb einer einzigen Sprache bleibst, ist die sprach-eigene Option meist angenehmer zu schreiben.

Häufige Anwendungsfälle

Häufige Fehler

  1. Das automatisch generierte Schema als finale Spec behandeln. Es ist ein Ausgangspunkt. Füge Format-Hinweise hinzu, markiere wirklich-optionale Felder, ergänze Dokumentation, lege Wertbereiche fest.
  2. Die $schema-Deklaration weglassen. Validatoren benutzen sie, um zu wissen, welcher Draft anzuwenden ist. Setze sie immer an den Anfang des Schemas.
  3. required als Pro-Eigenschaft-Attribut behandeln. Anders als bei XSD oder Mongoose-Schemas ist das required in JSON Schema ein Array auf Eltern-Objekt-Ebene, das die Namen der erforderlichen Eigenschaften auflistet.
  4. additionalProperties: false vergessen, wenn du strenge Validierung willst. Der Default ist true, was bedeutet, dass unbekannte Schlüssel stillschweigend erlaubt sind.
  5. enum mit examples verwechseln. enum = die Liste erlaubter Werte (Validierung). examples = Beispielwerte, nur für Dokumentation (kein Validierungseffekt).
  6. Annehmen, format werde durchgesetzt. Im Draft 2020-12 ist es standardmäßig eine Annotation, keine Assertion; deine Email-Regex läuft nicht, es sei denn, du opt-inst.
  7. Optionalität aus einem einzigen Beispiel ableiten. Jeder Schlüssel in deinem Beispiel wird standardmäßig required. Echte Specs haben fast immer optionale Felder; entferne sie als Teil der Pflege aus dem required-Array.

Weitere häufig gestellte Fragen

Funktioniert das Schema mit OpenAPI 3.1?

Ja. OpenAPI 3.1 (veröffentlicht im Februar 2021) hat seine Schema-Sprache vollständig an JSON Schema Draft 2020-12 angeglichen, was dieser Generator ausgibt. Lege das Schema in components.schemas in deinem OpenAPI-Dokument ab und referenziere es per $ref. Älteres OpenAPI 3.0 verwendete eine frühere Untermenge; du musst eventuell anpassen, falls du auf 3.0 zielst.

Kann ich aus diesem Schema Typen in meiner Sprache generieren?

Ja. quicktype generiert TypeScript, Go, Python, Java, C#, Swift, Kotlin, Rust, Elm und andere aus einem JSON Schema. json-schema-to-typescript ist eine JS-spezifische Alternative. Die meisten modernen Sprachen haben mindestens ein Schema-zu-Typen-Tool; das generierte Schema funktioniert für alle als Eingabe.

Was ist der Unterschied zwischen $defs und definitions?

Beide sind Orte, an denen wiederverwendbare Sub-Schemas abgelegt werden, die du anderswo im Dokument $referenzieren kannst. definitions ist der Legacy-Name, in den Drafts 04, 06 und 07 verwendet. $defs ist der aktuelle Name, in Draft 2019-09 eingeführt und in 2020-12 fortgeführt. Funktional gleichwertig, aber benutze $defs für neue Arbeit.

Wird mein JSON irgendwo hingeschickt?

Nein. Die Schema-Generierung läuft komplett in deinem Browser. Das eingefügte JSON wird lokal geparst, durchlaufen und als Schema in der Ausgabe-Textarea ausgegeben. Nichts wird auf einen Server hochgeladen, geloggt oder nach dem Schließen des Tabs aufbewahrt. Das ist wichtig, weil JSON-Beispiele oft echte Daten enthalten (Kundendatensätze, interne API-Antworten, Mitarbeiterinfos), die du nicht durch einen Drittanbieter laufen lassen willst.

Warum hat das Schema meines Arrays nur das erste Element beschrieben?

Inferenz aus einem einzelnen Beispiel behandelt Arrays als homogen: Sie schaut auf das erste Element und nimmt an, dass der Rest passt. Wenn dein echtes Array unterschiedliche Formen halten kann, musst du die items als { "oneOf": [...] } von Hand schreiben. Oder den Generator auf jede Variante separat laufen lassen und die Schemas kombinieren.

Soll ich überhaupt einen Generator nutzen oder das Schema von Hand schreiben?

Für ein kleines Schema, das du End-zu-End kontrollierst, lehrt dich Handschreiben die Spec schneller. Für eine große API-Antwort mit Dutzenden verschachtelten Objekten bringt dich der Generator in Sekunden zu einem Entwurf, und du verbringst die gesparte Zeit mit dem Pflegen von Einschränkungen, Beschreibungen und required-Arrays. Die meisten arbeitenden Entwickler tun beides: generieren, dann pflegen.

Verwandte Tools

Kostenloser Online-JSON-Formatierer & -Validator JSON-Vergleich JSON-zu-YAML-Konverter