Ir para o conteúdo

Converter JSON em TypeScript, Go, Python e outras linguagens

Cole exemplos de JSON e gere interfaces TypeScript, schemas Zod, structs Go e tipos Python, Java, C#, Kotlin, Swift e Rust, tudo no seu navegador.

Vários exemplos (um após o outro ou em JSON Lines) e os objetos dentro de listas são combinados: chaves ausentes em algum deles se tornam opcionais, e valores null passam a aceitar nulo.

TypeScript
Cole um exemplo e clique em Gerar tipos.
Declarar como
Roda no seu navegador · sem uploadComo funciona

Como usar: JSON para tipos

  1. 1

    Cole os exemplos de JSON

    Cole uma resposta, um array de registros ou várias respostas em sequência; o exemplo de amostra mostra dois usuários combinados.

  2. 2

    Escolha a linguagem

    Escolha TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift ou Rust, e as opções de estilo dela.

  3. 3

    Dê um nome ao tipo raiz

    Defina o nome do tipo de nível superior, por exemplo User ou OrderResponse.

  4. 4

    Gere e copie

    Clique em Gerar tipos e copie o código ou baixe-o; ao editar, ele é gerado de novo automaticamente.

Limites e Pro

Grátis e sem cadastro: 9 linguagens de saída com 3 estilos de Python, qualquer quantidade de exemplos combinados e arquivos de até 20 MB, com a geração interrompida após 30 segundos.

O Pro remove os anúncios; o gerador é o mesmo em todos os planos. Ver o Pro

Sobre: JSON para tipos

Escrever tipos à mão para a resposta de uma API é lento e sujeito a erros, principalmente quando os dados têm três níveis de aninhamento. Cole um ou mais exemplos de JSON e este gerador infere a estrutura e escreve definições prontas para colar em nove variações: interfaces ou type aliases do TypeScript, TypeScript com esquemas Zod para validação em tempo de execução, structs do Go com tags json, dataclasses, TypedDicts ou modelos Pydantic v2 do Python, records do Java com anotações Jackson, classes do C# para System.Text.Json, data classes do Kotlin para kotlinx.serialization, structs Codable do Swift e structs do Rust para serde.

Um único exemplo raramente mostra todos os campos, então o gerador combina quantos você enviar. Cole vários documentos em sequência, em JSON Lines ou um array de objetos: uma chave ausente em alguns objetos se torna opcional, uma chave que às vezes é null passa a aceitar nulo, um inteiro que às vezes é decimal vira float, e valores realmente mistos viram uma união ou o tipo dinâmico de JSON da linguagem. Objetos aninhados ganham tipos próprios com nome (orders vira Order, addresses vira Address), e formatos idênticos são gerados uma só vez e reutilizados. Objetos cujas chaves são números, UUIDs ou datas viram mapas.

Os nomes dos campos são convertidos para a convenção de cada linguagem, e chaves JSON diferentes, como first-name ou class, são mapeadas de volta com a anotação, o alias ou o CodingKeys adequado. Comentários e vírgulas finais no exemplo são tolerados.

O resultado descreve os exemplos que você fornece; o gerador não tem como conhecer campos ou valores que não aparecem neles, então confira o código com a documentação da sua API antes de usá-lo.

Privacidade

Os exemplos são analisados e o código é gerado por um Web Worker nesta aba, então respostas de API com dados pessoais ou internos nunca são enviadas. As opções de linguagem e de nomes ficam salvas no armazenamento local; o JSON que você cola não é guardado.

Recursos

Combina vários exemplos

Chaves ausentes se tornam opcionais e valores null passam a aceitar nulo em todos os exemplos que você colar.

9 linguagens

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift e Rust com nomes no padrão de cada linguagem.

Mapeamento de chaves incluído

Tags json, aliases, @SerialName, @JsonProperty e CodingKeys mantêm os nomes originais do JSON.

JSON para tipos: perguntas frequentes

Como a ferramenta decide quais campos são opcionais?
Um campo é opcional quando pelo menos um dos objetos naquela posição não contém a chave. Se você colar um único objeto, todos os campos são obrigatórios, porque nada indica o contrário. Cole várias respostas reais, ou um array de registros, para o gerador ver quais chaves aparecem e somem. A opção Tornar todos os campos opcionais serve para dados parciais ou de atualização.
O que acontece quando um valor às vezes é null?
O campo passa a aceitar nulo: string | null no TypeScript, um ponteiro no Go, str | None no Python, String? no Kotlin e no Swift, Option<String> no Rust e um tipo encapsulado ou anulável no Java e no C#. Um campo que é null em todos os exemplos não tem tipo a inferir, então vira o tipo desconhecido ou o tipo dinâmico de JSON da linguagem.
Por que meus inteiros viraram floats?
Se um exemplo tem 7 e outro tem 7.5 no mesmo campo, o tipo precisa comportar os dois, então vira float ou double. Números escritos com ponto decimal, como 10.0, também contam como decimais. No TypeScript os dois são number; com Zod, um campo só com inteiros é verificado com z.number().int().
É a mesma coisa que o quicktype?
Resolve o mesmo problema com um gerador próprio, que roda inteiramente no seu navegador e traz algumas coisas a mais: três estilos de Python, incluindo TypedDict, esquemas Zod e a combinação de vários documentos colados. O quicktype aceita mais linguagens e lê JSON Schema. Nas nove linguagens daqui, a saída foi pensada para compilar sem auxiliares extras em tempo de execução.
Ele detecta datas, enums ou UUIDs?
Não. Strings continuam strings, porque alguns exemplos não provam que todo valor futuro será uma data ou um item de um conjunto fixo. Altere o tipo gerado à mão para Date, time.Time, datetime, um enum ou um tipo de UUID onde a sua API garantir isso. Objetos com chaves UUID, números ou datas são a exceção: viram mapas.