JSON para struct em Go

Cole um objeto JSON e receba as structs Go correspondentes: uma struct para cada objeto, um slice para cada lista e uma tag json que mantém cada nome como foi escrito.

Gratuita Funciona no seu navegador Verificada em quinta-feira, 12 de novembro de 2026

O texto JSON inteiro, com chaves no início. Os nomes mantêm a ordem, e os números mantêm os seus dígitos. Nada é enviado nem guardado.

O nome da struct externa. Use letras, números e sublinhados, e comece com uma letra.

Acrescenta a opção omitempty, para que o encoding/json deixe o campo de fora da saída quando ele estiver vazio.

Resultado

Código Go — Copie-o ou baixe-o como models.go.
Verificação — Verde quando o JSON é convertido. Vermelho indica o lugar e o motivo.
Código Go

Esta ferramenta funciona no seu navegador. O que você digita não é enviado para nós.

Como usar

  1. Cole um objeto JSON em Objeto JSON. O texto inteiro precisa ser um só objeto, com chaves no início.
  2. Digite um Nome da struct raiz, como Produto, e marque Adicionar omitempty a todas as tags se quiser essa opção.
  3. Leia Verificação. Verde significa que o objeto foi convertido; vermelho indica o lugar onde está o problema.
  4. Copie o Código Go para um arquivo que tenha uma cláusula package, ou baixe-o como models.go.

Como os tipos Go são escolhidos

Cada valor JSON recebe o tipo Go que o comporta. Uma string vira string, e true ou false vira bool. As regras de Unmarshal do encoding/json (em inglês) decidem como o JSON é lido de volta nesses tipos.

  • Um número inteiro que cabe em 64 bits vira int64. Um número com ponto ou expoente, como 1.0 ou 2e3, vira float64, e assim também um número inteiro grande demais para int64.
  • Um null vira any. Um null ao lado de um valor de outro tipo assume esse tipo, porque um null não altera um valor Go de outro tipo.
  • Um objeto vira uma struct, e uma lista assume o tipo que os seus itens têm em comum. Objetos de uma mesma lista se fundem em uma só struct, e uma lista de tipos misturados vira []any.
  • Um objeto vazio vira uma struct vazia, e uma lista vazia vira []any.

Nomes, tags e conflitos

Cada campo recebe o nome a partir do nome JSON: as palavras são unidas, e cada uma começa com letra maiúscula, então user-name vira UserName. A especificação da linguagem Go (em inglês) exporta um campo cujo nome começa com letra maiúscula, e por isso a primeira letra é maiúscula. A tag json mantém o nome como foi escrito, para que a mesma chave seja encontrada na leitura do JSON.

Dois nomes que dão o mesmo nome Go recebem um número, como AB e AB2, e uma struct cujo nome já está em uso também recebe um número. Um item de lista recebe o nome a partir da lista, então products gera uma struct chamada Product, e um nome cujo singular a ferramenta não reconhece recebe o sufixo Item.

  • Um nome com vírgula, com um único hífen ou sem caracteres não pode ser uma tag json, então a ferramenta aponta essa chave e para.
  • Com omitempty ativo, cada tag recebe a opção. A ferramenta põe em maiúscula a primeira letra do nome da struct raiz, então product vira Product.

O que a ferramenta não faz

  • Não acrescenta cláusula package nem imports. Cole o código em um arquivo que tenha a sua própria cláusula package.
  • Não usa ponteiros para campos opcionais. Um campo ausente ou null no JSON não se distingue de um campo com o valor zero.
  • Não troca os nomes pelas siglas comuns do Go, então id vira Id. Renomeie o campo à mão se o estilo do seu código pedir ID.

Exemplo resolvido: um pedido com um dono e dois itens

O JSON abaixo tem um número inteiro, um decimal, um objeto e uma lista de dois objetos. A tabela mostra o campo Go em que cada nome JSON se torna. A ferramenta escreve as três structs abaixo da tabela, com a struct externa Order primeiro.

Nome JSON Campo Go Tipo Go Tag
id Id int64 json:"id"
ratio Ratio float64 json:"ratio"
owner Owner Owner json:"owner"
items Items []Item json:"items"

Perguntas frequentes

Por que um número inteiro é int64, e não int?

O tipo int64 é um inteiro fixo de 64 bits com sinal, e comporta todo número inteiro de -9223372036854775808 a 9223372036854775807. A ferramenta o usa em todo número inteiro que cabe nele, para que um valor não estoure. Troque o tipo por int à mão se o seu código precisar disso.

Por que um null vira any?

O Go não tem um tipo que comporte um null sozinho, então a ferramenta usa any, que comporta qualquer valor. Um null ao lado de um valor de outro tipo assume esse tipo, porque o encoding/json não altera um valor Go de outro tipo ao ler um null.

Por que o meu campo se chama Id, e não ID?

A ferramenta põe em maiúscula a primeira letra de cada palavra e não aplica as siglas comuns do Go, então id vira Id. A tag json continua dizendo id, e por isso os dados são lidos da mesma forma. Renomeie o campo se o estilo do seu código pedir ID.

Qual versão do Go a saída precisa?

A saída usa any para um null, e any é um alias de interface{} que foi acrescentado no Go 1.18. Se o seu código for mais antigo, troque any por interface{}, que é o mesmo tipo.

Por que a ferramenta recusa alguns nomes?

Uma tag json guarda o nome, seguido de opções que começam depois de uma vírgula, então um nome com vírgula não pode ser escrito em uma tag. Uma tag com um único hífen oculta o campo, então esse nome também é recusado.

O JSON que eu colo é enviado para algum lugar?

Não. A conversão roda no seu navegador, e nada do que você cola é guardado ou enviado ao nosso servidor. Não cole uma senha ou um token em nenhuma página em que você não confia.

Fontes

Números e texto verificados pela última vez em quinta-feira, 12 de novembro de 2026.

Usamos cookies necessários para o site funcionar. Com o seu consentimento, o Google também usa cookies de publicidade para mostrar anúncios personalizados. Se você recusá-los, continuará vendo anúncios, mas eles não serão personalizados.