100 % locale — i tuoi dati non lasciano mai il tuo browser

JSON in Zod — valida al confine

Trasforma un campione JSON in schemi Zod. Uno schema per oggetto, dichiarato prima dell’uso, e z.infer ti dà il tipo TypeScript dalla stessa sorgente.

Istantaneo Privato Zero cookie

Input JSON

Output Zod

Che cosa fa questo strumento

Un campione JSON diventa schemi Zod, un const per oggetto.

{ "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,
});

I figli vengono per primi: sono costanti a runtime, e uno schema deve esistere prima che un altro lo nomini.

I numeri sono letti come sono stati scritti

z.int() per un intero, z.number() per tutto ciò che porta un punto decimale o un esponente:

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

Fino a poco fa price usciva come z.int(): 10.0 si analizza in un numero intero e nulla conservava il letterale. Lo schema rifiutava allora 10.5 — il record successivo, con ogni probabilità. JSON ha un solo tipo numerico: la forma scritta è l’unica testimonianza di ciò che intendeva chi ha prodotto il dato, e la conversione ora la legge. Difetto trovato scrivendo questa pagina, poi corretto.

Sintassi di Zod 4

z.int() è la scrittura di Zod 4. In Zod 3 si scrive z.number().int(); nient’altro cambia tra le due versioni in questa uscita.

Ciò che un campione non può decidere per te

  • Nulla è .optional(). Una chiave vista una volta può comparire; se compaia sempre non sta nel documento.
  • null dà z.null(), uno schema che non accetta altro. Se il campo è «una stringa, a volte assente», il .nullable() spetta a te.
  • Le chiavi sconosciute sono tolte, non rifiutate, perché è il predefinito di Zod. .strict() è una decisione sulla tua API.
  • Un array eterogeneo diventa un’unione: [1, "a"] dà z.array(z.union([z.int(), z.string()])), che descrive esattamente il campione e sarà forse più largo dei tuoi dati veri.

Ognuno di questi punti è un luogo in cui lo schema generato è solo un inizio, e la pagina lo dice invece di lasciartelo scoprire in revisione.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Perché `10.0` dà `z.number()` e `3` un `z.int()`?
Perché così sono scritti. JSON ha un solo tipo numerico: l’unico indizio sull’originale è il letterale, dove un punto decimale o un esponente tradisce un valore in virgola mobile. `10.0` usciva come `z.int()`, e lo schema rifiutava poi 10.5 — il record successivo. Era un difetto vero, corretto.
`z.int()` esiste in Zod 3?
No, è arrivato con Zod 4. Nella versione 3 la stessa cosa si scrive `z.number().int()`, e basta una sostituzione. Tutto il resto dell’uscita — `z.object`, `z.array`, `z.union`, `z.null` — è identico tra le due versioni.
Lo schema rifiuta le chiavi sconosciute?
No. `z.object()` toglie ciò che non conosce invece di fallire: è il comportamento predefinito di Zod e qui resta tale. Se una chiave in più deve essere un errore, aggiungi `.strict()` tu — è una decisione sulla tua API, non qualcosa che un campione possa dirci.

Convertitori correlati