O que esta ferramenta faz
Uma amostra JSON vira esquemas Zod, um const por objeto.
{ "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,
});
Os filhos vêm primeiro: são constantes de execução, e um esquema precisa existir antes que outro o mencione.
Os números são lidos como foram escritos
z.int() para um inteiro, z.number() para tudo que traga ponto decimal ou expoente:
{ "price": 10.0, "quantity": 3 }
price: z.number(),
quantity: z.int(),
Até há pouco price saía como z.int(): 10.0 é analisado como número inteiro e nada guardava o literal. O esquema recusava então 10.5 — o registro seguinte, muito provavelmente. O JSON tem um único tipo numérico: a forma escrita é o único testemunho do que o produtor queria, e a conversão agora a lê. O defeito foi encontrado ao escrever esta página e corrigido.
Sintaxe do Zod 4
z.int() é a escrita do Zod 4. No Zod 3, escreva z.number().int(); nada mais difere entre as duas versões nesta saída.
O que uma amostra não pode decidir por você
- Nada é
.optional(). Uma chave vista uma vez pode aparecer; se aparece sempre não está no documento. nulldáz.null(), um esquema que não aceita mais nada. Se o campo for «uma string, às vezes ausente», o.nullable()cabe a você.- Chaves desconhecidas são retiradas, não recusadas, porque é o padrão do Zod.
.strict()é uma decisão sobre a sua API. - Um array heterogêneo vira união:
[1, "a"]dáz.array(z.union([z.int(), z.string()])), que descreve a amostra com exatidão e talvez seja mais largo que seus dados reais.
Cada um desses pontos é um lugar onde o esquema gerado é só um ponto de partida, e a página diz isso em vez de deixar que você descubra na revisão.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.