Conversor de JSON para Struct Go
Cole um objeto JSON (ou um array JSON) para gerar automaticamente as definições de struct Go correspondentes com tags json.
Dicas de uso
- Quando todos os elementos de um array são objetos, suas chaves são mescladas em um único struct. Chaves ausentes em alguns elementos recebem automaticamente a tag json `omitempty`.
- O nome do tipo raiz é "Root" por padrão, mas você pode renomeá-lo como quiser. Os nomes de struct para objetos aninhados são gerados automaticamente convertendo o nome da propriedade para PascalCase.
- O valor null do JSON é gerado como `interface{}`, já que Go não tem um tipo primitivo nativo que aceite null. Considere usar um ponteiro se precisar de um tratamento mais rigoroso.
- O resultado é um rascunho com colunas levemente alinhadas. Passá-lo pelo `gofmt` após colar vai ajustá-lo ao estilo padrão do seu projeto.
- Cole uma resposta JSON de exemplo da sua API como está para obter rapidamente um rascunho do struct de resposta usado no seu código Go.
Perguntas frequentes
Curiosidade — Por que Go combina structs com tags json
Go é uma linguagem de tipagem estática, e ao trabalhar com JSON, o pacote `encoding/json` da biblioteca padrão depende da correspondência entre os campos do struct e suas tags json para codificar e decodificar dados. Escrever manualmente um struct para o formato de resposta de uma API externa é uma tarefa repetitiva que cresce a cada campo adicionado, e isso se repete em muitos projetos Go.
Esta ferramenta analisa a estrutura de um JSON de exemplo e gera automaticamente as definições de struct e as tags json correspondentes, reduzindo esse trabalho repetitivo. Uma ferramenta conhecida no mesmo espaço é o quicktype, que suporta conversão para tipos de várias linguagens; mas para o caso mais simples de colar uma resposta de API de exemplo e obter rapidamente um struct Go, uma ferramenta focada em uma única tarefa também tem sua conveniência.
Como Go não tem nenhum recurso de linguagem para tornar um campo de struct opcional, a abordagem comum para campos JSON que podem estar ausentes é adicionar `omitempty` à tag json, ou usar um tipo ponteiro (como `*string`) para distinguir um valor zero de "nenhum valor". O struct gerado é apenas uma inferência mecânica a partir da estrutura, então tratar a possibilidade de null e futuras mudanças da API como algo a ser verificado e ajustado manualmente contra a especificação real é a prática padrão.