Pular para o conteúdo

Converter JSON em esquema Zod

Gera um schema Zod a partir de uma amostra JSON com a biblioteca json-to-zod. Cada valor é mapeado para z.string(), z.number(), z.boolean(), z.null() ou um z.object() aninhado; arrays vazios viram z.array(z.unknown()).

Rascunhar um validador em tempo de execução para uma resposta de API da qual você só tem um exemplo.

JSON

Zod Schema

Quando usar

  • Rascunhar um validador em tempo de execução para uma resposta de API da qual você só tem um exemplo.
  • Adicionar validação com Zod a um formulário ou carregador de configuração sem escrever o schema à mão.

Como usar

  1. Cole uma amostra JSON representativa no editor da esquerda.
  2. Abra as configurações e defina Root Schema Name se quiser um nome diferente de schema.
  3. Copie o código e refine-o: adicione .optional(), .email(), .min() e regras semelhantes conforme a sua especificação real.

Amostra JSON

{
  "id": 42,
  "email": "ada@example.com",
  "roles": ["admin", "editor"],
  "profile": { "nickname": null, "verified": true },
  "tags": []
}

Schema Zod (TypeScript)

import { z } from "zod"

export const schema = z.object({
  id: z.number(),
  email: z.string(),
  roles: z.array(z.string()),
  profile: z.object({ nickname: z.null(), verified: z.boolean() }),
  tags: z.array(z.unknown()),
})

Detalhes e limitações

A geração roda no navegador; a biblioteca é carregada sob demanda.

Os tipos vêm de uma única amostra. null vira apenas z.null(), não .nullable(), e chaves ausentes nunca são marcadas como opcionais.

Arrays com elementos de formatos diferentes viram z.union([...]) de cada formato, o que pode exigir mesclagem manual.

Formatos como email, data ou UUID não são detectados; todos viram z.string().

FAQ

Posso converter um array JSON na raiz?

Sim. Um array na raiz vira z.array(...). Se os objetos tiverem chaves diferentes, cada objeto distinto vira um membro de um z.union.

Como os valores null são tipados?

Como z.null(), que só aceita null. Se o campo também puder conter uma string, troque por z.string().nullable().

Ele adiciona .optional() a campos ausentes?

Não. Todas as chaves da amostra são obrigatórias. Marque os campos opcionais você mesmo.

Especificações e referências