Von JSON zu TypeScript-, Zod- und Pydantic-Modellen

Erzeugt TypeScript-Interfaces, Zod-Schemata und Pydantic-Modelle aus einem JSON-Beispiel auf dieser Seite. Die Ausgabe wird vor der Veröffentlichung mit tsc --strict, Zod 3 und 4 sowie Pydantic 2 geprüft.

Läuft lokal in deinem Browser
Sample JSON

Fügen Sie eine API-Antwort, Fixture oder ein Konfigurationsobjekt ein. Das Beispiel bleibt in diesem Browser.

Generated code
Generate from a JSON sample to create TypeScript types.

Die Inferenz basiert auf dem bereitgestellten Beispiel. Prüfen Sie IDs, nullable-Werte, Datumszeichenfolgen und fachliche Einschränkungen, bevor Sie erzeugte Typen produktiv verwenden.

So entstehen die drei Ausgaben

JSON-Beispiel einfügen, Wurzeltyp benennen, Typen erzeugen drücken: dieselbe Struktur erscheint als TypeScript, Zod und Pydantic, jeweils in einem Tab. Das Beispiel liest der Browser auf dieser Seite; nichts wird hochgeladen und keine Anfrage trägt es irgendwohin.

Die abgeleiteten Namen werden vor der Veröffentlichung mit echten Compilern geprüft: die TypeScript-Ausgabe besteht tsc --strict, das Zod-Schema validiert sein eigenes Beispiel unter Zod 3 und Zod 4, und die Pydantic-Modelle lassen sich unter Pydantic 2 importieren und validieren.

  1. Ein JSON-Beispiel einfügen: eine API-Antwort, ein Fixture oder ein Konfigurationsobjekt.
  2. Den Namen des Wurzeltyps setzen; Leerzeichen, Bindestriche und Unterstriche werden zu einem großgeschriebenen Namen zusammengezogen.
  3. Typen erzeugen drücken (oder Beispiel laden für ein gefülltes Beispiel) und zwischen den Tabs TypeScript, Zod und Pydantic wechseln.
  4. Sichtbaren Code kopieren drückt den Code des offenen Tabs in die Zwischenablage — optionale und nullbare Felder vorher prüfen.

Was der Generator ableitet — und wo er aufhört

Die drei Ausgaben

Ein JSON-Objekt wird ein Interface (oder ein Typ-Alias, wenn das Beispiel ein Array oder ein einzelner Wert ist), Arrays werden Array<…>, und ein leeres Objekt wird Record<string, unknown>. Zod erhält dieselbe Struktur als Schema plus einen z.infer-Typ, Pydantic eine BaseModel-Klasse pro Objekt mit List, Optional, Union und Dict aus typing.

Die Checkbox Export declarations entscheidet, ob die TypeScript- und Zod-Zeilen ein export tragen; die Pydantic-Ausgabe ist in beiden Fällen reines Python.

Arrays und optionale Felder

Alle Einträge eines Arrays werden zusammengeführt: ein Schlüssel, der nur in einem Teil der Objekte steht, wird optional (role?: string in TypeScript, .optional() in Zod, Optional[…] = None in Pydantic); ein Schlüssel mit unterschiedlichen Werttypen wird eine Union. Objekte zusammen mit Skalaren oder null ergeben ebenfalls eine Union, und null verdeckt den anderen Typ nie — er bleibt daneben stehen.

Ein leeres Array ergibt unknown / z.unknown() / List[Any], denn ein Beispiel ohne Einträge trägt keine Typinformation.

Namen, die umgeschrieben werden müssen

Schlüssel, die Python nicht schreiben kann, behalten ihre JSON-Schreibweise als Alias: {"a-b": 1} wird a_b mit alias="a-b", class, import oder None werden zu class_, import_ oder None_, damit die Datei importierbar bleibt. Schlüssel wie model_config, model_dump und alles ab model_-Anfang werden ebenfalls ergänzt, weil Pydantic diesen Namensraum reserviert.

Zwei Schlüssel, die sonst zu einem Feld zusammenfallen würden, bleiben getrennt: {"a-b": 1, "a_b": 2} ergibt a_b und a_b_2 mit eigenen Aliasen, und verschachtelte Objekte mit gleichem Namen bekommen eigene Klassen.

Grenzen und Datenschutz

Alles läuft im Tab: die Umwandlung sendet keine Anfrage, und das Beispiel ist nach dem Neuladen weg. Ein 2-MB-Beispiel ist in Chrome in rund 0,35 s typisiert.

Die Typen stammen aus einem einzigen Beispiel und beschreiben deshalb diesen Aufbau: optionale Schlüssel sind die im Array fehlenden, nicht die, die Ihre API auslassen darf, und Texte bleiben string — E-Mail-, Datums- oder UUID-Formate werden nicht geraten. Gelesen wird mit dem JSON-Parser des Browsers, daher verlieren ganze Zahlen über 2^53 an Genauigkeit und landen in der Pydantic-Ausgabe als float.

Zuletzt verwendet: