JSON para Estrutura Go

Próximo

Cole um exemplo de JSON e obtenha definições de estrutura Go que o analisam de forma limpa com encoding/json. Os campos são exportados (CamelCase), marcados com as chaves JSON originais, promovidos a ponteiros quando um valor pode ser nulo, e objetos aninhados recebem suas próprias declarações de estrutura nomeadas.

Como converter JSON em estrutura Go

  1. 1

    Cole o JSON

    Um único exemplo é suficiente. Múltiplos exemplos melhoram a inferência de nulos.

  2. 2

    Escolha a nomenclatura

    PascalCase para campos exportados é a convenção Go. Escolha o estilo de abreviação (`URL` vs `Url`, `ID` vs `Id`).

  3. 3

    Escolha a estratégia opcional

    Use ponteiros para campos anuláveis (mais idiomático), ou tags `omitempty`.

  4. 4

    Copie as estruturas

    Uma estrutura raiz mais as aninhadas. Cole em um arquivo `.go` e pressione `go build`.

Exemplo de saída

Para:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Saída:

type User struct {
    FirstName string   `json:"first_name"`
    Age       int      `json:"age"`
    Email     *string  `json:"email"`
    Tags      []string `json:"tags"`
}

Mapeamento de tipos

Valor JSON Tipo Go
string string
inteiro int ou int64
número (decimal) float64
booleano bool
nulo (com irmão não nulo) *T (ponteiro)
array []T
objeto Estrutura nomeada
array misto []interface{}

Idiomas de nomenclatura que o gerador segue

  • Inicialismos em maiúsculas: id -> ID, url -> URL, api_key -> APIKey. Isso corresponde ao estilo recomendado do Go (e às regras do go vet / staticcheck).
  • Snake_case JSON -> campos PascalCase: first_name -> FirstName.
  • Acrônimos de uma palavra preservados: IP permanece IP, HTTP permanece HTTP.
  • Tag JSON: json:"first_name" mantém a chave original para que a codificação funcione corretamente.

Campos opcionais: ponteiro ou omitempty?

Estratégia Usar quando
Ponteiro (*T) Você precisa distinguir “ausente” de “valor zero”
omitempty Você só quer pular valores zero na serialização; a deserialização armazena zero para ausentes
Nenhum O campo está sempre presente e valores zero são significativos

O gerador usa por padrão ponteiro + omitempty para qualquer coisa vista como nula; ajuste com base na sua semântica.

Erros comuns

  • Usar int onde o inteiro JSON excede MaxInt32 em um alvo de 32 bits. Use int64 para valores grandes conhecidos.
  • Serializar de volta e perder a ordem das chaves. encoding/json emite chaves na ordem de declaração de campo, não na ordem JSON original. Classifique manualmente se precisar de saída canônica.
  • Arrays de formas mistas. []interface{} perde a segurança de tipo. Considere tipos de união com um campo discriminador type em vez disso.
  • Esquecer omitempty em opcionais. Sem isso, campos opcionais são serializados como "foo": null em vez de serem omitidos.

Perguntas frequentes

Use ponteiros quando precisar distinguir “campo ausente” de “campo é zero”. Use omitempty quando o valor zero não for um valor de negócio legal ("", 0, false sempre significam “pule isso”). Muitas equipes escolhem um e aplicam consistentemente em toda a base de código.

Cada objeto aninhado se torna uma declaração de estrutura nomeada separada (por exemplo, User -> Address). Tipos são incorporados apenas quando a estrutura aninhada é pequena e usada uma vez; caso contrário, você obtém tipos limpos e reutilizáveis.

Sim. id se torna ID, url se torna URL, api_key se torna APIKey. Isso é o que o go vet espera e o que a maioria dos guias de estilo Go recomenda.

O gerador emite estruturas simples com tags padrão json:. Para implementações personalizadas de UnmarshalJSON (por exemplo, para datas em formatos não-ISO), adicione-as manualmente após a geração.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas