Zum Inhalt springen

JSON in ein Zod-Schema umwandeln

Erzeugt mit der Bibliothek json-to-zod ein Zod-Schema aus einem JSON-Beispiel. Jeder Wert wird auf z.string(), z.number(), z.boolean(), z.null() oder ein verschachteltes z.object() abgebildet; leere Arrays werden zu z.array(z.unknown()).

Einen Laufzeit-Validator für eine API-Antwort entwerfen, von der du nur ein Beispiel hast.

JSON

Zod Schema

Wann sie hilft

  • Einen Laufzeit-Validator für eine API-Antwort entwerfen, von der du nur ein Beispiel hast.
  • Zod-Validierung zu einem Formular oder Konfigurations-Loader hinzufügen, ohne das Schema von Hand zu schreiben.

Anwendung

  1. Füge ein repräsentatives JSON-Beispiel in den linken Editor ein.
  2. Öffne die Einstellungen und setze "Root Schema Name", wenn du einen anderen Namen als schema möchtest.
  3. Kopiere den Code und verschärfe ihn dann: Ergänze .optional(), .email(), .min() und ähnliche Regeln aus deiner echten Spezifikation.

JSON-Beispiel

{
  "id": 42,
  "email": "ada@example.com",
  "roles": ["admin", "editor"],
  "profile": { "nickname": null, "verified": true },
  "tags": []
}

Zod-Schema (TypeScript)

import { z } from "zod"

export const schema = z.object({
  id: z.number(),
  email: z.string(),
  roles: z.array(z.string()),
  profile: z.object({ nickname: z.null(), verified: z.boolean() }),
  tags: z.array(z.unknown()),
})

Details und Einschränkungen

Die Erzeugung läuft im Browser; die Bibliothek wird bei Bedarf geladen.

Die Typen stammen aus einem einzigen Beispiel. null wird nur zu z.null(), nicht zu .nullable(), und fehlende Schlüssel werden nie als optional markiert.

Arrays mit unterschiedlich aufgebauten Elementen werden zu z.union([...]) aus jeder Struktur, was eventuell manuell zusammengeführt werden muss.

Formate wie E-Mail, Datum oder UUID werden nicht erkannt; alle werden zu z.string().

FAQ

Kann ich ein JSON-Array auf oberster Ebene umwandeln?

Ja. Ein Root-Array wird zu z.array(...). Haben seine Objekte unterschiedliche Schlüssel, wird jedes unterschiedliche Objekt ein Mitglied einer z.union.

Wie werden null-Werte typisiert?

Als z.null(), das nur null akzeptiert. Wenn das Feld auch einen String enthalten kann, ändere es zu z.string().nullable().

Fügt es .optional() für fehlende Felder hinzu?

Nein. Jeder Schlüssel im Beispiel ist erforderlich. Markiere optionale Felder selbst.

Spezifikationen und Referenzen