100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in JSON Schema — ein Vertrag für die CI

Ein JSON-Beispiel in ein JSON Schema (Draft 2020-12) verwandeln. Pflichtfelder und additionalProperties sind Schalter — der Vertrag sagt, was Sie meinen.

Sofort Privat Null Cookies
Einrückung

JSON-Eingabe

JSON Schema-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe wird ein JSON Schema in Draft 2020-12.

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "name": { "type": "string" },
    "address": {
      "type": "object",
      "properties": { "city": { "type": "string" } },
      "required": ["city"]
    }
  },
  "required": ["id", "name", "address"]
}

Verschachtelte Objekte stehen an Ort und Stelle. Kein $defs-Abschnitt, kein $ref: für eine Probe ist ein eingebettetes Schema dasjenige, das man von oben nach unten liest.

Zwei Schalter, weil beide Antworten vertretbar sind

  • Pflichtschlüssel. Standardmäßig an: jeder Schlüssel der Probe wird aufgeführt. Aus: gar kein required-Array, und ein Dokument ohne einen Schlüssel validiert trotzdem.
  • additionalProperties. Standardmäßig großzügig — ein zusätzlicher Schlüssel geht durch. Streng gesetzt, bekommt jedes Objekt "additionalProperties": false, und ein unerwarteter Schlüssel ist ein Fehler.

Keine der beiden Entscheidungen lässt sich einer Probe entnehmen. Es sind Aussagen über Ihre API und gehören daher Ihnen, statt hier erraten zu werden.

integer und number kommen aus dem Literal

3 ergibt integer; 3.0 und 1e3 ergeben number. JSON hat einen einzigen Zahlentyp, also ist die Schreibweise die einzige Spur dessen, was die Zahl erzeugt hat. Ein Schema, das 10.0 ganzzahlig nennt, weist 10.5 ab — sehr wahrscheinlich den nächsten Datensatz. Genau das tat dieses Werkzeug, bis der Fehler beim Schreiben dieser Seiten gefunden und behoben wurde.

Was die Probe nicht beschreibt

  • "n": null ergibt {"type": "null"}, ein Schema, das nichts anderes annimmt. Ist das Feld eine nullbare Zeichenkette, lautet die Änderung {"type": ["string", "null"]}.
  • Ein leeres Array ergibt {"type": "array"} ohne items: über nie gesehene Elemente wird nichts behauptet.
  • Ein gemischtes Array ergibt anyOf mit genau den vorhandenen Formen.
  • Kein format, kein minLength, kein pattern. Eine E-Mail, eine UUID und ein Satz sind hier alle "type": "string". "format": "email" hinzuzufügen wäre ein Raten über Bedeutung statt ein Lesen von Struktur — und das Erste, was Sie von Hand ergänzen, sobald Sie das Feld kennen.

Datenschutz ab Werk

Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.

Häufige Fragen

Warum steht alles in `required`?
Weil jeder Schlüssel in der Probe stand, und mehr trägt das Dokument nicht. Es ist zugleich ein Schalter: ausgeschaltet wird gar kein `required`-Array ausgegeben. Eingeschaltet erhalten Sie ein Schema, das bei einem fehlenden Schlüssel laut scheitert — meist der nützlichere Ausgangspunkt.
Warum gibt es keinen `$defs`-Abschnitt?
Weil das Schema eingebettet ist: verschachtelte Objekte stehen dort, wo sie vorkommen, auch wenn dieselbe Form zweimal auftritt. Für eine Probe liest sich das besser und validiert gleich. Wer ein großes Schema faktorisiert, verschiebt wiederkehrende Teilschemata von Hand nach `$defs` mit `$ref`.
Was entscheidet zwischen `integer` und `number`?
Das Literal. `3` ergibt `integer`, `3.0` und `1e3` ergeben `number`, denn JSON hat einen einzigen Zahlentyp, und die geschriebene Form ist das einzige Zeugnis des Originals. Ein Schema, das `10.0` ganzzahlig nennt, wiese `10.5` ab — den nächsten Datensatz — genau das tat dieses Werkzeug bis zur Behebung.

Ähnliche Konverter