JSON para Estrutura Go
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
Cole o JSON
Um único exemplo é suficiente. Múltiplos exemplos melhoram a inferência de nulos.
-
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
Escolha a estratégia opcional
Use ponteiros para campos anuláveis (mais idiomático), ou tags `omitempty`.
-
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 dogo vet/staticcheck). - Snake_case JSON -> campos PascalCase:
first_name->FirstName. - Acrônimos de uma palavra preservados:
IPpermaneceIP,HTTPpermaneceHTTP. - 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
intonde o inteiro JSON excedeMaxInt32em um alvo de 32 bits. Useint64para valores grandes conhecidos. - Serializar de volta e perder a ordem das chaves.
encoding/jsonemite 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 discriminadortypeem vez disso. - Esquecer
omitemptyem opcionais. Sem isso, campos opcionais são serializados como"foo": nullem 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
Gerador de cards CSS
Crie um card com seu título, texto e link opcional. Ajuste cores, borda, espaçamento, sombra e efeito ao passar o mouse. Depois copie ou baixe o HTML e o CSS.
Gerador de textura de ruído
Gere uma textura de ruído em SVG que se repete sem emendas, com opacidade, frequência do grão, tipo de ruído e cor de fundo ajustáveis, e copie o CSS já pronto.
Gerador de Configuração Webpack
Crie um webpack.config.js para webpack 5 a partir de um formulário curto: defina o entry, a pasta de saída e o modo, e ative TypeScript, Babel, um loader CSS, HtmlWebpackPlugin e um servidor de desenvolvimento.
Gerador de Docker Compose
Gere um docker-compose.yml a partir de definições de serviços com imagem, portas e volumes, com padrões de boas práticas.
Conversor de base numérica
Converta números entre binário, octal, decimal, hexadecimal e qualquer base personalizada de 2 a 36, com o detalhamento posicional.
Conversor de Tamanho de Arquivo
Converta entre bytes, KB, MB, GB, TB e as unidades binárias IEC (KiB, MiB, GiB, TiB), combinando decimal e binário como preferir.
Ferramenta disponível em outros idiomas
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON thành cấu trúc [VI]
- JSON till Go-struktur [SV]
- JSON→Go構造体 [JA]
- JSON ke Struktur Go [ID]
- JSON a Estructura Go [ES]
- JSON na strukturę Go [PL]
- JSON naar Go-structuur [NL]
- JSON إلى بنية Go [AR]
- JSON을 Go 구조체로 변환 [KO]
- JSON vers Go Struct [FR]
- JSON zu Go Struct [DE]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]
- JSON в структуру данных [RU]
- JSON'dan Go Yapısına [TR]
- JSON 至Go结构 [ZH]