Pular para o conteúdo

JSON para schema Zod

JSON to Zod Schema

Monta um schema Zod a partir de um exemplo de JSON, inferindo nullable, opcional e enum.

Transforma um documento JSON de exemplo em um esquema Zod — a verificação em tempo de execução que os tipos TypeScript não podem te dar. A saída é um conjunto de constantes `z.object` em ordem de declaração mais um tipo inferido para a raiz, então uma colada só te dá o parser e o tipo.

🔒 Roda inteiramente no seu navegadorzodjsoncodegenvalidation
Gerar

JSON de exemplo

Solte um arquivo .json

Lido nesta aba. Nada é enviado.

Dê todos os elementos que você tiver. Cada registro a mais estreita o palpite: um campo que falta em um deles é o que o torna opcional.

TypeScript

Como usar

  1. Cole todos os registros que você tiver

    Cada elemento de cada array é lido e mesclado, não só o primeiro. Três registros dizem muito mais do que um, porque um campo ausente em um deles é exatamente o que torna esse campo opcional.

  2. Dê nome ao tipo raiz

    Objetos aninhados recebem o nome da chave que os contém, no singular para arrays, então `users` produz um `User`. Só a raiz precisa de um nome seu.

  3. Leia as contagens abaixo da saída

    Tipos, campos opcionais, uniões e quantos registros foram mesclados. Uma contagem de uniões acima de zero significa que um campo teve dois tipos de valor diferentes na sua amostra — vale olhar antes de colar o resultado em uma base de código.

  4. Cole e analise com ele

    Os blocos são emitidos filhos primeiro, o que importa no Zod: um `z.object` que referencia uma constante declarada depois lança uma exceção na importação em vez de falhar na checagem de tipos. Mantenha a ordem como foi gerada.

Perguntas frequentes

Por que o esquema não bate com o contrato da minha API?

Porque ele descreve a amostra, não o contrato. Um campo marcado como opcional simplesmente faltava em um dos registros que você colou; um campo marcado como obrigatório ainda pode ser opcional em uma API da qual você não viu o bastante. Trate a saída como um primeiro rascunho para apertar à mão.

Há refinamentos — email, uuid, comprimento mínimo?

Nenhum. Tudo é `z.string()`, `z.number()` ou `z.boolean()`, com `.int()` quando todos os números da amostra eram inteiros. Adicionar `.email()` porque uma string tinha um @ seria adivinhar, e um refinamento errado rejeita dados válidos em produção.

O que acontece com um array vazio?

Ele vira `z.array(z.unknown())`, porque um array vazio não diz nada sobre o tipo dos seus elementos. Cole um registro em que o array não esteja vazio e o esquema se preenche sozinho.

Para qual versão do Zod isto serve?

As chamadas emitidas são as que são iguais no Zod 3 e no 4: `z.object`, `z.array`, `z.union`, `.nullable()`, `.optional()` e `z.record(z.string(), z.unknown())` na forma de dois argumentos. Nada específico de uma versão é usado.

Pode receber de

Em seguida

Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.