DevToolPal
PT

JSON para struct Go

Gere structs Go com tags json a partir de um exemplo JSON, com structs aninhados nomeados ou inline e omitempty.

Roda localmente, nada é enviado

Opções

Objetos aninhados

JSON

0 caracteres · 0 B

Go

0 caracteres · 0 B

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

  1. Cole JSON na entrada, envie um arquivo .json ou clique em Exemplo.
  2. Defina o nome do tipo raiz e escolha como os objetos aninhados são escritos, quais campos recebem omitempty e se campos anuláveis usam ponteiros.
  3. Copie o código Go ou baixe como arquivo .go e adicione sua linha package.

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.Time quando 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.