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 Todas

O 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

  1. Cole um exemplo JSON em Entrada JSON (ou clique em Carregar exemplo / Abrir arquivo).
  2. Defina o Nome do tipo raiz (padrão Root).
  3. Mantenha ou desmarque Adicionar omitempty a campos opcionais e anuláveis.
  4. Copie o código Go gerado ou clique em Baixar para salvá-lo como arquivo.

Exemplo

Entrada
{"id":1,"name":"A","tags":["x"]}
Saída
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.

Próximos passos recomendados

Explore mais categorias