Zum Inhalt springen

JSON in JSON Schema umwandeln — Numio

Leitet aus einem JSON-Beispiel ein JSON Schema (draft-07) ab. Bei Arrays von Objekten werden alle Elemente zusammengeführt: Ein Schlüssel, der in einigen Elementen fehlt oder null ist, wird nicht in required aufgenommen.

Aus mitgeschnittenen Beispielen ein erstes Validierungsschema für eine API-Antwort oder einen Webhook-Payload erstellen.

JSON

JSON Schema

Wann sie hilft

  • Aus mitgeschnittenen Beispielen ein erstes Validierungsschema für eine API-Antwort oder einen Webhook-Payload erstellen.
  • Ein Schema für Ajv, OpenAPI oder einen weiteren Schritt von JSON Schema nach TypeScript/Zod erzeugen.

Anwendung

  1. Füge ein JSON-Beispiel in den linken Editor ein oder öffne über die Schaltfläche zum Laden einer Datei eine UTF-8-Datei; ein Array mit mehreren Datensätzen liefert bessere required-Listen.
  2. Lies das Schema: In einem einzelnen Objekt ist jeder Schlüssel required, Schlüssel, die in einigen Array-Elementen fehlen oder null sind, sind optional.
  3. Kopiere das Schema und ergänze Einschränkungen, die das Beispiel nicht zeigen kann, etwa Formate, Enums, integer und minimum.

JSON-Beispiel

[
  { "id": 1, "name": "Ada", "email": null },
  { "id": 2, "name": "Lin", "email": "lin@example.com" }
]

JSON Schema (draft-07)

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Generated schema for Root",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "name": {
        "type": "string"
      },
      "email": {
        "type": "string"
      }
    },
    "required": [
      "id",
      "name"
    ]
  }
}

Details und Einschränkungen

Zahlen sind immer "type": "number"; integer, Formate (email, date-time), Enums und Patterns werden nicht abgeleitet. Der Titel ist immer "Generated schema for Root".

Ein Feld, das überall null ist, erhält ein leeres Schema {}. Ein null neben anderen Werten wird als optional behandelt, nicht als Typ null.

Arrays mit gemischten Typen wie [1, "x"] werden zu einem Tupel (items-Liste mit additionalItems: false); ein leeres Array ergibt items: {}.

Wird im Browser von json_typegen, kompiliert zu WebAssembly, erzeugt. Bei ungültigem JSON (auch mit abschließenden Kommas) wird der JSON-Parse-Fehler angezeigt, und ein einzelner Wert wie 42 wird abgelehnt, da er keine Struktur hat.

FAQ

Welchen JSON-Schema-Draft gibt es aus?

Draft-07, deklariert als "$schema": "http://json-schema.org/draft-07/schema#". Es gibt keine Option, 2019-09 oder 2020-12 zu wählen.

Wie werden optionale Felder erkannt?

Nur über Elemente desselben Arrays: Ein Schlüssel, der in einigen Objekten fehlt oder in einigen null ist, wird nicht in required aufgenommen. In einem einzelnen Objekt ist jeder Schlüssel required.

Kann es ein JSON-Array auf oberster Ebene umwandeln?

Ja. Die Wurzel erhält "type": "array", und die Elemente werden wie im Beispiel zu einem items-Schema zusammengeführt.

Spezifikationen und Referenzen