Geração de tipos

JSON para Gomodelos a partir de respostas reais

Compare os dois registros de exemplo. O resultado inclui a declaração do pacote e somente os imports necessários.

JSON para Go

Entrada JSON

Análise e geração neste navegador. Os dados não são enviados nem armazenados.

Resultado Go

Opções de geração

Números em any precisam de Decoder.UseNumber(). Ponteiros não distinguem ausência de null.

3 declarações · 2 tipos ponteiro

JSON para Go prepara um modelo com base em respostas de API. Junte vários registros em um array para revelar campos ausentes, valores null e mudanças de tipo.

Uma amostra não comprova campos obrigatórios nem regras de negócio. Revise o resultado com o contrato da API e teste a decodificação no projeto.

Por que usar JSON para Go?

Analisar além do primeiro registro

JSON para Go considera todos os elementos na mesma posição do array. Um campo presente apenas no segundo registro também entra no modelo. Tipos conhecidos com null ou ausência podem receber ponteiros.

Dois cartões com campos diferentes convergem para uma estrutura completa; marcadores vazios representam valores ausentes.

Preservar o número antes de escolher

Inteiros simples dentro do intervalo int64 usam int64. Decimais, expoentes e inteiros maiores usam json.Number. A inferência não arredonda os valores previamente por meio de números de ponto flutuante do JavaScript.

Uma sequência longa de blocos numéricos chega inteira à estrutura de saída, sem perder blocos finais.

Revisar o modelo antes de salvar

01

Reunir variantes relevantes

Coloque registros do mesmo formato de resposta em um array. Objetos em propriedades diferentes recebem tipos independentes, mesmo que pareçam iguais.

02

Escolher as inferências adequadas

Desative datas para preservar o texto original. Desative nomes aninhados para gerar structs anônimos. Sem tags, a associação às chaves originais se perde e precisa ser revisada antes de decodificar.

03

Atualizar após mudanças

A geração automática espera 350 ms. Desative-a para exibir Gerar ou use Ctrl/Cmd+Enter. Qualquer edição bloqueia copiar e baixar até que o resultado atual seja gerado com sucesso.

Nomes, tipos ponteiro e números

Campos exportados com as chaves

Este conversor JSON transforma snake_case e camelCase em nomes ASCII exportados. Siglas como ID permanecem em maiúsculas; colisões recebem sufixos numéricos estáveis. As tags mantêm as chaves originais compatíveis.

Ponteiros quando há evidência de tipo

Um escalar ou Go Struct conhecido usa ponteiro quando falta ou recebe null em alguma amostra. Slices e maps já aceitam nil. Um campo somente null usa any; ponteiros não distinguem ausência de null explícito.

A forma numérica também conta

Somente tokens inteiros simples no intervalo de 64 bits com sinal usam int64. Até 1.0 e 1e3 viram json.Number, pois encoding/json não decodifica essas formas diretamente em inteiros. Confira erros de conversão antes de fazer cálculos.

Structs aninhados e datas válidas

Datas completas RFC3339 com calendário válido e até nove dígitos fracionários podem virar time.Time. Todas as strings não null daquela posição precisam atender ao critério. Aliases na raiz conservam os métodos do tipo original.

Limites e compatibilidade do código

Destino: projetos Go 1.18 ou superior
O arquivo usa any e tags compatíveis com encoding/json v1. Não gera UnmarshalJSON personalizado, validadores, omitempty, conversão de Schema ou aplicação executável. Rode gofmt e os testes no seu projeto.
Algumas chaves exigem outro modelo
Com tags, chaves vazias, vírgulas, aspas, barras invertidas, crases, controles e emojis causam erro com caminho. Use map ou decodificador próprio. A chave - usa a tag -, para impedir que o campo seja ignorado.
Tipos genéricos exigem configuração
Tipos incompatíveis usam any; arrays vazios, []any; objetos vazios, map[string]any. Use Decoder.UseNumber() para números nessas posições, pois o padrão é float64. Gerar tipos não altera a configuração do decodificador.
Instantes não preservam toda a escrita
Datas inválidas, somente data, ausência de fuso ou mais de nove dígitos fracionários permanecem string. time.Time pode normalizar fusos e zeros finais ao recodificar. Desative a inferência se precisar manter o texto exato.
Entrada estrita com limites definidos
Comentários, chaves repetidas, vírgulas finais e vários documentos são rejeitados. Sem busca por URL, importação ou reparo. Limites: 500.000 caracteres de entrada, profundidade 100, 50.000 nós, 1.000 declarações e 1.000.000 caracteres de saída.

Perguntas sobre JSON para Go

O download contém a declaração de pacote?

Sim. O arquivo inclui package, com models como padrão, e apenas os imports necessários. Você pode alterar o pacote antes de gerar. O resultado é código de modelo, sem função main nem lógica de aplicação.

Posso usar um array no nível principal?

Sim. JSON para Go aceita todos os valores raiz de JSON. Arrays, números, strings, booleanos e null usam aliases; assim os métodos de time.Time e json.Number são mantidos quando esses tipos são inferidos.

Como snake_case e camelCase viram nomes Go?

São transformados em nomes ASCII exportados, com inicial maiúscula. Siglas conhecidas como ID são preservadas e colisões recebem números. As tags habilitadas mantêm a correspondência com as chaves compatíveis.

Qual tipo representa null ou um campo ausente?

Quando há evidência de um escalar ou struct, o padrão é usar ponteiro. Somente null resulta em any; slices e maps já podem ser nil. Um ponteiro não identifica separadamente ausência e null explícito.

O que ocorre quando o tipo de uma chave varia no array?

Valores incompatíveis na mesma posição produzem any. Todos os elementos são analisados, inclusive os últimos. Para números nessas posições genéricas, configure Decoder.UseNumber() no seu código.

Encontrou um caso de inferência a melhorar?

Comece com uma resposta real

Use JSON para Go com vários registros, confira ponteiros, números e datas, depois exporte o arquivo para testar no projeto.