Ir para o conteúdo
Totalmente local

JSON para esquema Zod

Gere um esquema de validação Zod e tipos TypeScript a partir de uma amostra JSON, com detecção de formatos e enumerações.

Entrada
Saída

JSON para esquema Zod

Cole uma amostra JSON — uma resposta de API, um ficheiro de configuração, uma linha de base de dados — e obtenha um esquema Zod pronto a usar em TypeScript. Os tipos são inferidos por campo: os primitivos mapeiam para z.string(), z.number() e z.boolean(), os arrays têm o tipo de elemento inferido e um valor que difere entre ocorrências torna-se z.union(). Uma string que parece um endereço de e-mail, URL, UUID ou data ISO obtém o validador correspondente — .email(), .url(), .uuid(), .date() ou .datetime() — em vez de um z.string() simples.

Forneça um array de objetos da mesma forma, como linhas de um ponto final de lista, e o gerador mescla cada elemento antes de tipificar o campo: uma chave que falta em algumas linhas torna-se .optional(), uma chave que às vezes é nula torna-se .nullable() ou .optional() dependendo da opção que escolher, e um campo que repete um pequeno conjunto de valores — uma coluna de estado ou função — torna-se um z.enum() adequado em vez de uma string aberta. Ative "Dividir objetos aninhados" para extrair cada objeto aninhado em sua própria exportação nomeada em vez de um literal profundamente aninhado, onde as formas idênticas compartilham automaticamente um esquema. Ative "Objetos rigorosos" para rejeitar qualquer chave que a amostra nunca mostrou, capturando erros de digitação e campos de API inesperados durante a análise em vez de depois.

Nomeie o esquema exportado conforme o seu código espera e, opcionalmente, adicione export type X = z.infer<typeof X> logo abaixo, para que o validador em tempo de execução e o tipo em tempo de compilação provenham da mesma fonte e nunca possam divergir silenciosamente.

Tudo é executado localmente no seu navegador. O JSON que cola — respostas de API contendo tokens, registos de utilizadores, cargas internas — é analisado e tipificado completamente no seu dispositivo e nunca é carregado para nenhum lugar. Cole uma amostra, copie o esquema gerado para o seu projeto e comece a validar o que analisa.

FAQ

Como decide entre .optional() e .nullable()?
Uma chave que falta em algumas amostras de array é sempre .optional() — não há outra forma de permitir uma chave em falta. Uma chave que está presente mas às vezes é nula é ambígua, então a opção "Tratamento de null" decide: nullable a tipifica com precisão com .nullable(), optional trata um valor nulo como se estivesse em falta.
Como são tratados os objetos aninhados?
Por padrão, um objeto aninhado é tipificado inline, exatamente onde aparece. Ative "Dividir objetos aninhados" para dar a cada forma aninhada sua própria export const ...Schema e as formas idênticas compartilham automaticamente um esquema em vez de duplicá-lo.
Quando um campo se torna z.enum() em vez de z.string()?
Quando "Detetar enumerações" está ativado e um campo repete um pequeno conjunto de valores string distintos — 2 a 5 — num array de amostras, como uma coluna de estado ou categoria. Um campo com apenas valores únicos ou demasiados distintos permanece z.string().
O que faz a opção "Objetos rigorosos"?
Adiciona .strict() a cada z.object() gerado, para que a análise falhe se a entrada contiver uma chave que a amostra nunca mostrou — útil para capturar erros de digitação ou adições de API não anunciadas em vez de ignorá-las silenciosamente.
O meu JSON é carregado para algum lugar?
Não. O esquema é gerado completamente no seu navegador — o seu JSON nunca deixa o seu dispositivo.