JSON para struct Go
Transforme JSON em structs Go com nomes de campo exportados, tags json, ponteiros para nulls e omitempty opcional. Lida com objetos aninhados e arrays. Grátis.
Objetos aninhados viram structs separadas; valores anuláveis usam ponteiros; inteiros viram int64, decimais float64 e valores mistos ou só null viram any.
Executa totalmente no seu navegador. Seus dados nunca são enviados.
Ferramentas Relacionadas
Ver TodasO que é JSON para struct Go?
Gere definições struct idiomáticas em Go a partir de um exemplo JSON. Os nomes de campo são exportados em PascalCase com as siglas do Go (ID, URL, API…), cada campo leva uma tag json:"…" com a chave original e objetos aninhados viram structs nomeadas separadas.
Como usar JSON para struct Go
- Cole um exemplo JSON em Entrada JSON (ou clique em Carregar exemplo / Abrir arquivo).
- Defina o Nome do tipo raiz (padrão
Root). - Mantenha ou desmarque Adicionar omitempty a campos opcionais e anuláveis.
- Copie o código Go gerado ou clique em Baixar para salvá-lo como arquivo.
Exemplo
{"id":1,"name":"A","tags":["x"]} type Root struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
} Quando usar JSON para struct Go
Use-o para fazer unmarshal de respostas de API com encoding/json. Ele não gera tipos personalizados para datas ou enums; troque string por time.Time você mesmo quando fizer sentido.
Como funciona JSON para struct Go
O exemplo é percorrido recursivamente e cada posição acumula os tipos que encontrou. Arrays de objetos são mesclados em um único tipo: uma chave ausente em alguns elementos vira opcional, uma chave que é null em algum lugar vira anulável, inteiros misturados com decimais viram um tipo de ponto flutuante e qualquer outra mistura de tipos recai em um tipo dinâmico. Objetos aninhados viram tipos nomeados próprios (PascalCase da chave, com chaves de array no singular: orders → Order), com sufixos numéricos quando os nomes colidem. A saída Go usa int64 para inteiros, float64 para decimais, string, bool, slices para arrays, um ponteiro (*T) para valores anuláveis e any para valores dinâmicos ou sempre nulos. As colunas são alinhadas como na saída do gofmt.
Casos de Uso Comuns
- Modelar uma resposta REST para json.Unmarshal
- Criar structs de configuração a partir de um arquivo JSON
- Acelerar a escrita de DTOs para um microsserviço em Go
- Comparar a nomenclatura de campos entre JSON e código Go
Perguntas Frequentes
Por que int64 em vez de int?
O int64 tem tamanho garantido em todas as plataformas, o que evita surpresas de overflow com IDs grandes. Troque por int se preferir.
Quando é usado um ponteiro?
Quando o exemplo contém null para uma chave, o campo vira *T para que um valor ausente possa ser diferenciado do valor zero.
O que o omitempty faz?
O encoding/json pula o campo na serialização se ele tiver o valor zero. A opção o acrescenta só aos campos que são opcionais ou anuláveis no exemplo.