JSON-Schema-Generator

Fügen Sie ein oder mehrere JSON-Beispiele ein, und der Generator leitet ein JSON-Schema ab, das Sie zur Validierung neuer Payloads verwenden können. Erkennt Typen, markiert Felder als erforderlich, wenn sie in jedem Beispiel erscheinen, leitet Enums ab, wenn Werte aus einer kleinen geschlossenen Menge stammen, und erzeugt Ausgaben, die dem JSON-Schema-Entwurf 2020-12 entsprechen.

So generieren Sie ein JSON-Schema

  1. 1

    Beispieldokumente einfügen

    Ein oder mehrere echte Payloads, je mehr Vielfalt, desto genauer das abgeleitete Schema.

  2. 2

    Wählen Sie den Entwurf

    Entwurf 2020-12 (aktuell), Entwurf 07 (weit verbreitet) oder Entwurf 04 (veraltet für OpenAPI).

  3. 3

    Inferenz anpassen

    Enum-Inferenz umschalten, Strategie für erforderliche Felder (Schnittmenge vs. Vereinigung) und ob alle Felder als `erforderlich` markiert werden sollen, wenn nur ein Beispiel gegeben ist.

  4. 4

    Generieren

    Das Schema wird mit `$schema`, `title`, `type`, `properties` und verschachtelten `$ref`s für wiederholte Unterobjekte ausgegeben.

Was die Inferenz gut macht

  • Typen: string, number, integer, boolean, null, array, object.
  • Nullbarkeit: Ein Feld, das in einem Beispiel null und in einem anderen einen String hat, wird zu ["string", "null"].
  • Array-Elemente: Homogene Arrays erzeugen ein einzelnes items-Schema; heterogene Arrays erzeugen prefixItems.
  • Aufzählungen (enum): Wenn alle beobachteten Werte aus einer kleinen Menge stammen (konfigurierbar, standardmäßig 10 verschiedene Werte), wird ein enum ausgegeben.
  • Erforderlich: Bei mehreren Beispielen wird die Schnittmenge der Schlüssel zu required; bei einem Beispiel sind alle Schlüssel erforderlich, es sei denn, Sie entscheiden sich dagegen.
  • Formate: Strings, die ISO-8601-Daten, E-Mails oder URIs entsprechen, erhalten ein abgeleitetes format.

Was die Inferenz nicht wissen kann

  • Absicht vs. Beispiel: Ein Beispiel age: 25 leitet type: integer ab, kann aber nicht wissen, dass Sie auch null akzeptieren. Geben Sie mehrere Beispiele an, die Randfälle abdecken.
  • Einschränkungen: minLength, maximum, pattern, diese müssen Sie manuell hinzufügen. Die Inferenz rät keine Grenzen aus Beispielen.
  • Geschäftslogik: “Genau eines dieser drei Felder muss gesetzt sein” erfordert oneOf, nicht ableitbar.
  • Referenzen: Der Generator gibt ein flaches Schema aus. Wenn Sie wiederholte Formen in $defs auslagern möchten, tun Sie dies nach der Generierung.

Beispielausgabe

Von einem einzelnen Beispiel:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

Das abgeleitete Schema (Entwurf 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

Häufige Fehler

  • Ableiten aus einem Beispiel. Das Schema wird überangepasst, jedes Feld wird erforderlich, keine Nulltoleranz. Geben Sie immer mindestens 5-10 verschiedene Beispiele an.
  • Verwendung von integer, wenn Sie number meinten. Wenn ein Beispiel eine Dezimalzahl hat, wird der abgeleitete Typ number; wenn alle ganzzahlig sind, wird er integer. Für Felder, die beides sein könnten, fügen Sie ein Dezimalbeispiel hinzu.
  • Vergessen von optionalen Feldern. Ein Feld, das in 4 von 5 Beispielen vorhanden, aber in 1 Beispiel fehlt, wird optional, beabsichtigt. Wenn alle 5 Beispiele es zufällig enthalten, wird das Schema es als erforderlich markieren, obwohl es in Ihrer API tatsächlich optional ist.

Häufig gestellte Fragen

Je mehr, desto besser, aber 5-10 verschiedene Beispiele erzeugen typischerweise ein vernünftiges Schema. Bei einem Beispiel wird jedes Feld erforderlich, und die Nullbarkeit kann nicht abgeleitet werden, geben Sie immer mehrere Varianten an, wenn Sie können.

Entwurf 2020-12 standardmäßig. Entwurf 07 und 04 sind für die Kompatibilität mit OpenAPI 3.0 verfügbar (das einen Entwurf 05/07-Teilmenge verwendet).

Nein. Sinnvolle Einschränkungen aus Beispielen abzuleiten, würde das Schema überanpassen. Fügen Sie minLength, maximum, pattern usw. manuell nach der Generierung basierend auf Ihren Geschäftsregeln hinzu.

Ja. Wenn Sie ein JSON-Array einfügen, behandelt der Generator jedes Element als separates Beispiel und erzeugt ein Schema, das ein einzelnes Element beschreibt, nicht das äußere Array. Schalten Sie “als Array-Container behandeln” um, wenn Sie die Form des äußeren Arrays stattdessen möchten.

Verwandte Tools

Tool in anderen Sprachen verfügbar