Ir para o conteúdo
AZ Tools

Conversor de JSON para struct Go

Cole uma amostra do seu JSON e receba na hora a definição de tipo Go correspondente — a conversão roda ao vivo enquanto você digita, inteiramente no navegador. As chaves do objeto viram nomes de campo exportados em PascalCase para que o encoding/json consiga serializá-los, e cada campo carrega uma tag json:"…" com a chave original, de modo que uma ida e volta pela biblioteca padrão reproduz o JSON de partida. Inteiros são mapeados para int64, decimais para float64, e objetos aninhados viram structs anônimos inline que espelham a forma do payload. Como os tipos são inferidos de uma única amostra, trate a saída como um bom primeiro rascunho: um campo que por acaso vale 42 vira int64 mesmo que a API também possa devolver 41.5, null e arrays vazios saem como interface{} porque a amostra não revela tipo de elemento algum, e o tipo de um slice vem apenas do seu primeiro elemento. Revise o resultado, aperte os tipos que você conhece melhor e acrescente ,omitempty ou ponteiros para campos opcionais. Sua entrada nunca sai do dispositivo e fica no localStorage para sobreviver a um reload.

Struct Go

Como usar

  1. Cole ou digite uma amostra do seu JSON na caixa de entrada — a conversão é ao vivo, não há botão para apertar.
  2. Se quiser, nomeie o struct raiz (padrão AutoGenerated); o nome é normalizado para um identificador PascalCase exportado.
  3. Copie a definição gerada com o botão Copiar e cole no seu arquivo Go.
  4. Revise os tipos inferidos: alargue números que possam ser fracionários, substitua os interface{} e acrescente ,omitempty onde os campos forem opcionais.

Perguntas frequentes

Como os números são tipados?
Inteiros viram int64 e qualquer valor com parte fracionária vira float64. É inferência de uma única amostra — se um campo puder ser fracionário algum dia, troque você mesmo para float64; se precisar de precisão decimal exata, considere json.Number.
O que acontece com null ou arrays vazios?
null vira interface{} e arrays vazios viram []interface{}, porque a amostra não traz nenhuma informação de tipo. Substitua assim que souber o tipo real — um campo que pode ser null costuma ficar melhor como ponteiro em Go.
Como os nomes de campo e as tags json são escolhidos?
As chaves são divididas nos caracteres não alfanuméricos e unidas em PascalCase como identificadores exportados (user_id vira UserId), porque o encoding/json só enxerga campos exportados. A chave original é preservada literalmente na tag json, então a serialização reproduz exatamente as suas chaves.
Objetos aninhados viram tipos nomeados separados?
Não — eles saem como structs anônimos inline, o que mantém a saída em uma única declaração autocontida que você cola em qualquer lugar. Se uma forma se repetir em vários pontos, extraia-a manualmente para um tipo nomeado. Note também que o tipo de elemento de um array é inferido só do primeiro elemento, então arrays com tipos misturados passam despercebidos.
Meu JSON é enviado ou armazenado em algum lugar?
Ele nunca sai do navegador — o parse e a geração são JavaScript puramente do lado do cliente. Por conveniência, a entrada e o nome raiz ficam salvos no localStorage do navegador e sobrevivem a um reload; apague a entrada se colou algo sensível em uma máquina compartilhada.

Ferramentas relacionadas