O que faz
O conversor de JSON para Go lê um exemplo JSON e escreve definições de structs Go com tags json, prontas para o encoding/json. Cole uma resposta da API que você chama e receba tipos que pode usar com json.Unmarshal na hora, sem escrever cada campo e tag à mão.
O conversor analisa cada valor do exemplo. Objetos aninhados viram structs próprios, todos os itens de um array são combinados em um tipo de elemento e campos que faltam em alguns itens ou às vezes são null são detectados como opcionais. A saída é alinhada como o gofmt faria.
Como usar
- Cole JSON na entrada, envie um arquivo
.jsonou clique em Exemplo. - Defina o nome do tipo raiz e escolha como os objetos aninhados são escritos, quais campos recebem
omitemptye se campos anuláveis usam ponteiros. - Copie o código Go ou baixe como arquivo
.goe adicione sua linhapackage.
JSON inválido é indicado com a linha e a coluna do problema.
Exemplo
Este JSON:
{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }
vira estes structs:
type Root struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
type Profile struct {
AvatarURL string `json:"avatar_url"`
}
Dicas
- Um único exemplo só mostra o que contém. Se um valor pode ser número ou texto, inclua os dois ou coloque vários exemplos em um array para que sejam combinados.
- Timestamps chegam como texto. Troque você mesmo o tipo para
time.Timequando o formato for RFC 3339. - Objetos com exatamente os mesmos campos compartilham um struct, o que mantém a saída curta quando a mesma forma aparece em vários lugares.
- Também escreve TypeScript? O gerador de JSON para TypeScript usa a mesma inferência para criar interfaces.
Perguntas frequentes
› Como os nomes dos campos são escolhidos?
Cada chave JSON vira um nome Go exportado em PascalCase, com as siglas comuns em maiúsculas como o golint espera, então user_id vira UserID e avatar_url vira AvatarURL. A chave original fica na tag json, para que o encoding/json mapeie os campos exatamente.
› Quais tipos Go são usados?
Strings viram string, números inteiros viram int (ou int64 quando algum valor não cabe em 32 bits), decimais viram float64 e booleanos viram bool. Arrays viram slices, objetos vazios viram map[string]any e valores que são só null ou misturam vários tipos viram any.
› Qual a diferença entre structs nomeados e inline?
O modo nomeado escreve cada objeto aninhado como um tipo próprio, como Address ou Order, o que facilita reutilizar e testar. O modo inline coloca tipos struct anônimos direto dentro do pai e mantém tudo em uma única declaração, como fazem muitos conversores rápidos.
› Quando o omitempty é adicionado?
Por padrão só nos campos opcionais, ou seja, os que faltam em alguns objetos de um array ou às vezes são null. Você também pode adicioná-lo a todos os campos ou a nenhum. Ative os ponteiros para diferenciar um valor ausente ou null de um valor zero.
› Meu JSON é enviado?
Não. Os structs são gerados no seu navegador e nada é enviado a um servidor.