Pular para o conteúdo

Converter JSON em estruturas Go

Gera definições de struct Go a partir de JSON usando um port do json-to-go, formatadas com gofmt. As chaves viram campos exportados em CamelCase com tags json:"..."; objetos aninhados viram structs anônimas inline e null vira any.

Escrever uma struct para fazer json.Unmarshal da resposta de uma API REST de terceiros.

Quando usar

  • Escrever uma struct para fazer json.Unmarshal da resposta de uma API REST de terceiros.
  • Criar os tipos de requisição e resposta de um handler HTTP em Go a partir de payloads de exemplo.

Como usar

  1. Cole um objeto ou array JSON no editor da esquerda.
  2. Leia a struct gerada; o tipo raiz sempre se chama AutoGenerated.
  3. Copie-a para o seu pacote, renomeie o tipo e extraia as structs inline para tipos nomeados se for reutilizá-las.

JSON

{
  "id": 42,
  "user_name": "ada",
  "score": 9.5,
  "active": true,
  "deleted_at": null,
  "tags": ["go", "json"],
  "address": { "city": "Tokyo", "zip": "100-0001" }
}

Struct Go

type AutoGenerated struct {
	ID        int      `json:"id"`
	UserName  string   `json:"user_name"`
	Score     float64  `json:"score"`
	Active    bool     `json:"active"`
	DeletedAt any      `json:"deleted_at"`
	Tags      []string `json:"tags"`
	Address   struct {
		City string `json:"city"`
		Zip  string `json:"zip"`
	} `json:"address"`
}

Detalhes e limitações

A geração roda no navegador. Não há configurações para o nome do tipo, structs inline ou nomeadas, nem para as tags.

Siglas ficam em maiúsculas (id vira ID) e snake_case vira CamelCase, com a chave original mantida na tag json.

Números inteiros viram int (int64 quando grandes) e decimais viram float64. null, arrays vazios e arrays mistos viram any ou []any.

Quando os objetos de um array diferem, as chaves que faltam em alguns recebem ,omitempty.

FAQ

Posso converter um array JSON na raiz?

Sim. Ele gera type AutoGenerated []struct{...}, mesclando os campos de todos os objetos do array.

Por que meu campo null tem tipo any?

Um valor null não traz informação de tipo. Substitua any por um ponteiro como *string ou *time.Time para continuar aceitando nil.

Ele gera structs aninhadas nomeadas?

Não. Objetos aninhados são structs anônimas inline. Mova-as para tipos nomeados manualmente se precisar referenciá-las.

Especificações e referências