UTILS.
100% no navegador
🛡️

JSON para Schema Zod

Cole um valor JSON de exemplo e gere um schema Zod mais um tipo TypeScript inferido, para que uma forma valide em tempo de execução e tipe em tempo de compilação.

saída

Sobre esta ferramenta

A ferramenta JSON para Schema Zod transforma um JSON de exemplo colado em um schema Zod pronto para uso e o tipo TypeScript correspondente. Zod é a biblioteca de validação dominante em TypeScript, e escrever à mão árvores de z.object para payloads de API reais é lento e sujeito a erros. Este conversor analisa seu JSON com JSON.parse, percorre o valor recursivamente e emite Zod idiomático: strings viram z.string(), inteiros z.number().int(), outros números z.number(), booleanos z.boolean(), null z.null(), e objetos aninhados seus próprios schemas z.object({...}) nomeados.

Tudo roda localmente no seu navegador — seu JSON é analisado na página e nunca é enviado, então payloads sensíveis permanecem no seu dispositivo. Arrays inferem o tipo de seus elementos fazendo um merge profundo de cada elemento, então um array de objetos com chaves ligeiramente diferentes produz um schema onde as chaves ausentes em alguns elementos são marcadas como .optional(). Strings de data-hora ISO-8601 são reconhecidas e emitidas como z.string().datetime(). Chaves de objeto que não são identificadores válidos são citadas com segurança.

A saída é um módulo completo: um const exportado para cada schema de objeto (filhos definidos antes dos pais que os referenciam) seguido por export type Root = z.infer<typeof Root>, então você ganha tipos em tempo de compilação de graça. Use a caixa de nome-raiz para renomear o schema de nível superior, e o alternador de chave-ausente para tratar chaves ausentes como .optional() (padrão) ou .nullable(). Copie o resultado ou baixe-o como um arquivo .ts.

Perguntas frequentes

Como os tipos JSON são mapeados para Zod?
string para z.string(), uma string de data-hora ISO para z.string().datetime(), inteiros para z.number().int(), outros números para z.number(), booleanos para z.boolean(), null para z.null(), arrays para z.array(...), e objetos para um z.object({...}) nomeado. Arrays vazios viram z.array(z.unknown()).
Como campos opcionais ou nulos são tratados?
Quando os elementos de um array ou irmãos mesclados não têm uma chave, essa chave é marcada como .optional(). Um valor visto como null vira z.null() ou adiciona .nullable(). O alternador de chave-ausente permite emitir .optional() (padrão) ou .nullable() para chaves ausentes em alguns exemplos.
Ele também me dá um tipo TypeScript?
Sim. Após o schema ele emite export type Root = z.infer<typeof Root>, então o tipo estático inferido é derivado do próprio schema — uma única fonte da verdade tanto para validação em runtime quanto para tipos em tempo de compilação.
Meu JSON é enviado para algum lugar?
Não. A análise e a geração de código acontecem inteiramente no seu navegador com JSON.parse e JavaScript puro. Nada é enviado a um servidor, então você pode colar respostas de API privadas com segurança.

Mais ferramentas