Como usar
- Cole um objeto JSON em Objeto JSON. O texto inteiro precisa ser um só objeto, com chaves no início.
- Digite um Nome da struct raiz, como Produto, e marque Adicionar omitempty a todas as tags se quiser essa opção.
- Leia Verificação. Verde significa que o objeto foi convertido; vermelho indica o lugar onde está o problema.
- 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
- Go: encoding/json, regras de Unmarshal e tags de struct (em inglês)
- Especificação da linguagem Go: tipos numéricos e any (em inglês)
Números e texto verificados pela última vez em quinta-feira, 12 de novembro de 2026.