Gere interfaces TypeScript, esquemas Zod e modelos Pydantic a partir de um exemplo JSON nesta página. A saída é conferida com tsc --strict, Zod 3 e 4 e Pydantic 2 antes de publicar.
Funciona localmente no seu navegadorCole uma resposta de API, fixture ou objeto de configuração. A amostra permanece neste navegador.
Generate from a JSON sample to create TypeScript types.
A inferência usa a amostra fornecida. Revise IDs, valores nullable, strings de data e restrições de negócio antes de usar os tipos gerados em produção.
Cole um exemplo JSON, dê um nome ao tipo raiz e clique em Gerar tipos: a mesma estrutura aparece em TypeScript, Zod e Pydantic, cada uma em sua aba. O exemplo é lido pelo próprio navegador nesta página; nada é enviado e nenhuma requisição o transporta.
Os nomes inferidos são conferidos com compiladores reais antes de publicar: a saída TypeScript passa no tsc --strict, o esquema Zod valida o próprio exemplo no Zod 3 e no Zod 4, e os modelos Pydantic importam e validam o exemplo no Pydantic 2.
Um objeto JSON vira uma interface (ou um alias de tipo quando o exemplo é um array ou um valor solto), arrays viram Array<…> e um objeto vazio vira Record<string, unknown>. O Zod recebe a mesma estrutura como esquema mais um tipo z.infer, e o Pydantic recebe uma classe BaseModel por objeto com List, Optional, Union e Dict do typing.
A caixa Export declarations decide se as linhas de TypeScript e Zod levam export; a saída do Pydantic é Python comum nos dois casos.
Todas as entradas de um array são fundidas: a chave que aparece só em parte dos objetos fica opcional (role?: string no TypeScript, .optional() no Zod, Optional[…] = None no Pydantic) e a chave com valores de tipos diferentes vira uma união. Objetos misturados com escalares ou com null também geram uma união, e null nunca esconde o outro tipo: ele é mantido ao lado dele.
Um array vazio é unknown / z.unknown() / List[Any], porque uma amostra sem elementos não traz informação de tipo.
Chaves que o Python não aceita mantêm a grafia JSON como alias: {"a-b": 1} vira a_b com alias="a-b", e class, import ou None viram class_, import_ ou None_ para o arquivo importar. Chaves model_config, model_dump e qualquer outra que comece com model_ também ganham sufixo, porque o Pydantic reserva esse espaço de nomes.
Duas chaves que de outra forma se fundiriam em um único campo continuam separadas: {"a-b": 1, "a_b": 2} gera a_b e a_b_2 com seus próprios aliases, e objetos aninhados com nomes em conflito recebem classes distintas.
Tudo roda na aba: a conversão não envia requisição e o exemplo desaparece ao recarregar. Um exemplo de 2 MB é tipado em cerca de 0,35 s no Chrome.
Os tipos vêm de um único exemplo, então descrevem o que aquele documento contém: as chaves opcionais são as que faltam em parte do array, não as que sua API pode omitir, e textos continuam string — nenhum formato de e-mail, data ou UUID é adivinhado. O analisador JSON do navegador lê o exemplo, então inteiros acima de 2^53 perdem precisão e terminam como float na saída do Pydantic.