100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in Zod — an der Grenze validieren

Ein JSON-Beispiel in Zod-Schemas verwandeln. Ein Schema je Objekt, vor der Verwendung deklariert, und z.infer liefert den TypeScript-Typ gleich mit.

Sofort Privat Null Cookies

JSON-Eingabe

Zod-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe werden Zod-Schemas, ein const je Objekt.

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
import { z } from "zod";

export const AddressSchema = z.object({
  city: z.string(),
});

export const RootSchema = z.object({
  id: z.int(),
  name: z.string(),
  address: AddressSchema,
});

Die Kinder kommen zuerst: es sind Laufzeit-Konstanten, und ein Schema muss vorhanden sein, bevor ein anderes es nennt.

Zahlen werden gelesen, wie sie geschrieben wurden

z.int() für eine Ganzzahl, z.number() für alles mit Dezimalpunkt oder Exponent:

{ "price": 10.0, "quantity": 3 }
price: z.number(),
quantity: z.int(),

Bis vor kurzem kam price als z.int() heraus: 10.0 wird zu einer ganzen Zahl geparst, und nichts bewahrte das Literal. Das Schema wies dann 10.5 ab — höchstwahrscheinlich den nächsten Datensatz. JSON hat einen einzigen Zahlentyp; die geschriebene Form ist das einzige Zeugnis dessen, was der Erzeuger meinte, und die Umwandlung liest sie nun. Gefunden beim Schreiben dieser Seite, behoben.

Zod-4-Syntax

z.int() ist die Schreibweise von Zod 4. In Zod 3 schreiben Sie z.number().int(); sonst unterscheidet sich in dieser Ausgabe nichts zwischen den Versionen.

Was eine Probe nicht für Sie entscheiden kann

  • Nichts ist .optional(). Ein einmal gesehener Schlüssel kann auftreten; ob immer, steht nicht im Dokument.
  • null ergibt z.null(), ein Schema, das nichts anderes annimmt. Ist das Feld „eine Zeichenkette, manchmal fehlend“, gehört .nullable() Ihnen.
  • Unbekannte Schlüssel werden entfernt, nicht abgelehnt, denn so ist Zods Vorgabe. .strict() ist eine Entscheidung über Ihre API.
  • Ein gemischtes Array wird eine Union: [1, "a"] ergibt z.array(z.union([z.int(), z.string()])) — genau die Probe, womöglich weiter als Ihre echten Daten.

Jeder dieser Punkte ist eine Stelle, an der das erzeugte Schema nur ein Anfang ist, und die Seite sagt es, statt es Sie im Review entdecken zu lassen.

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 ergibt `10.0` ein `z.number()` und `3` ein `z.int()`?
Weil sie so geschrieben sind. JSON hat einen einzigen Zahlentyp: der einzige Hinweis auf das Original ist das Literal, in dem ein Dezimalpunkt oder ein Exponent einen Fließkommawert verrät. `10.0` kam als `z.int()` heraus, und das Schema wies dann 10.5 ab — den nächsten Datensatz. Ein echter Fehler, behoben.
Gibt es `z.int()` in Zod 3?
Nein, es kam mit Zod 4. In Version 3 schreibt man dasselbe `z.number().int()`, ein Ersetzen genügt. Alles andere in der Ausgabe — `z.object`, `z.array`, `z.union`, `z.null` — ist zwischen beiden Versionen gleich.
Lehnt das Schema unbekannte Schlüssel ab?
Nein. `z.object()` entfernt, was es nicht kennt, statt zu scheitern: das ist Zods Vorgabe und bleibt hier so. Soll ein überzähliger Schlüssel ein Fehler sein, fügen Sie `.strict()` selbst hinzu — eine Entscheidung über Ihre API, nicht etwas, das eine Probe uns sagen könnte.

Ähnliche Konverter