Gerador de structs JSON para TypeScript / Go / Rust

Cole JSON, escolha a linguagem alvo, obtenha uma definição de tipo idiomática. Suporta TypeScript, Go, Rust, Kotlin, Java, C# e Python TypedDict. Baseado em quicktype, roda no navegador.

  1. Cole uma amostra JSON representativa na área de texto à esquerda.
  2. Escolha a linguagem alvo no dropdown Alvo.
  3. Clique em Gerar. O primeiro clique carrega o motor (~2–3 segundos numa conexão 4G); gerações subsequentes são instantâneas.
  4. Copie o resultado, ou baixe com a extensão de arquivo correta.
O que ele faz?

Gera tipos idiomáticos na sua linguagem alvo inferindo o schema de uma ou mais amostras JSON. Tipos de campo são inferidos — strings continuam strings, números viram o tipo numérico da linguagem, booleanos viram bool, arrays viram slices/listas/arrays, objetos aninhados viram tipos aninhados. Campos opcionais (os que às vezes são null ou faltam entre amostras) são marcados como nullable na saída. Baseado em quicktype-core, o mesmo motor por trás de quicktype.io.

Exemplo

Entrada JSON:

{
  "name": "Ada",
  "age": 36,
  "active": true,
  "tags": ["math", "logic"]
}

Saída TypeScript (alvo = TypeScript, nome do tipo = User):

export interface User {
  name: string;
  age: number;
  active: boolean;
  tags: string[];
}

Pegadinhas comuns e como tratá-las

Inferência de tipos a partir de JSON tem limites fundamentais — JSON não carrega informação suficiente para restringir totalmente um sistema de tipos. Os padrões abaixo cobrem onde o tipo inferido pode não corresponder ao que você quer.

  • Opcional vs. obrigatório a partir de uma única amostra. Um único objeto JSON não pode dizer ao gerador quais campos são opcionais. Forneça múltiplas amostras (cole um array JSON de objetos representativos) para que o gerador possa marcar campos às vezes ausentes como opcionais.
  • Arrays vazios. `{"items": []}` produz um array de `any` — o gerador não tem elemento para inferir. Inclua pelo menos um exemplo populado, ou conserte o tipo na mão após geração.
  • Elementos de array heterogêneos. Um array JSON `[1, "two"]` vira um tipo união — o resultado pode não ser ergonômico em algumas linguagens alvo (Go especialmente). Se o array deve ser homogêneo nos seus dados reais, conserte a amostra.
  • Strings de data. JSON não tem tipo Date. Strings de data ISO 8601 são inferidas como `string`. quicktype às vezes pode detectá-las como Date na saída TypeScript — ajuste na mão se quiser tipagem mais forte.
  • IDs numéricos que perdem precisão. Números JSON > 2^53 (IDs grandes de 64 bits) perdem precisão quando parseados pelo JavaScript. O tipo TypeScript gerado usa `number` mesmo assim. Para precisão 64 bits, use `string` no seu JSON ou migre para tipo `bigint` na mão.
  • Campos com underscore vs. camelCase. O gerador preserva a nomeação de campos JSON. Se seu JSON usa snake_case mas a linguagem alvo espera camelCase, a saída usa campos snake_case com anotações serde/json onde aplicável. Sobrescreva por pós-processamento ou usando flags do CLI quicktype.
Perguntas frequentes

Por que o primeiro Gerar é lento?

O bundle do motor quicktype tem cerca de 465 KB gzipped. Carrega no primeiro clique em Gerar, que leva 2–3 segundos numa conexão 4G. Depois disso o módulo fica em cache pelo resto da sessão da página — e o navegador faz cache entre visitas, então primeiros cliques subsequentes também são instantâneos a menos que o cache tenha sido limpo.

Posso gerar a partir de múltiplas amostras JSON?

Envolva suas amostras em um array JSON e cole o array. O gerador infere a união de campos vistos entre as amostras e marca campos como opcionais quando faltam em pelo menos uma. Esta é a forma certa de garantir que seus tipos gerados tolerem variação nos dados reais.

Qual linguagem devo escolher para código de backend?

Combine com o que seu projeto já usa. Saída Go usa tags de struct padrão para `encoding/json`. Rust usa serde derives. Kotlin usa anotações kotlinx.serialization. Java produz POJOs compatíveis com Jackson. A escolha é específica do projeto, não baseada em preferência.

Os comentários de campos são preservados?

JSON não tem sintaxe de comentários, então não há comentários na entrada para transferir. quicktype pode incluir doc comments na saída para algumas linguagens — são descrições auto-geradas, não conteúdo do usuário.

Meu JSON é enviado para algum lugar?

Não. Tudo roda no seu navegador — sua entrada é processada localmente pelo módulo JavaScript quicktype-core nesta página. quicktype-core mesmo carrega da mesma origem (host de assets estáticos deste site); nenhum servidor de terceiros vê seus dados.

Que tamanho de amostra JSON posso usar?

Até cerca de 5 MB de JSON antes do gerador começar a levar tempo notável. O gerador é projetado para amostras representativas, não datasets completos — tipicamente um punhado de objetos basta para inferir um schema limpo.