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. nulldà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.