1001Ferramentas
🐹 Conversores

JSON para Go Struct

Converta um JSON em struct Go com tags `json:` e tipos inferidos automaticamente. Detecta strings, ints, floats, bools, slices e structs aninhadas. Tudo no navegador.

Como funciona?

Cada chave do JSON vira um campo da struct em PascalCase (Go exige inicial maiúscula para serialização). A tag json:"..." preserva o nome original para que encoding/json faça o mapeamento correto.

Tipos são inferidos automaticamente: números inteiros viram int, decimais viram float64, arrays homogêneos viram []T, e arrays mistos ou nulos caem em interface{}. Tudo no navegador.

Do payload JSON à struct com tags

Chegou o JSON de uma API e agora você precisa da struct Go correspondente. Escrever à mão é chato e traiçoeiro: se a tag json: sair com um typo, o encoding/json não reclama de nada, só devolve o zero value do campo, e você passa a tarde procurando por que created_at está vazio. Cole o JSON, escolha o nome do tipo raiz e a struct sai pronta para colar no arquivo.

Cada chave vira um campo em PascalCase porque Go só serializa campos exportados, ou seja, com inicial maiúscula, e a tag json: guarda o nome original. Os tipos vêm por inferência do valor da amostra: inteiro vira int, decimal vira float64, null vira interface{}. Aí mora a pegadinha, JSON não separa inteiro de decimal, então um preço que veio como 10.0 é lido como int e quebra na primeira resposta com 10.5.

Em arrays, deixe um único elemento representativo antes de colar. Com dois ou mais objetos na mesma lista, o gerador cria uma struct para cada elemento (Post, Post2) e o campo cai para []interface{}. Chaves que batem com palavra reservada ou começam com dígito ganham underscore, virando _Type ou _2fa, e campo iniciado por underscore não é exportado, então renomeie antes de compilar. Tudo acontece no navegador.

Perguntas frequentes

Por que meu campo decimal virou int?
Porque na amostra ele veio sem casa decimal, como 10.0 ou 0. Troque para float64 na struct ou cole um exemplo com valor decimal de verdade.
Ele gera ponteiros e omitempty?
Não. A saída usa tipos diretos e só a tag json com o nome original. Se o campo pode vir ausente ou null, troque para *T e acrescente ,omitempty na tag você mesmo.
O JSON colado vai para algum servidor?
Não. A conversão é feita em JavaScript dentro da sua aba, então dá para colar payload de ambiente interno sem enviar nada para fora.

Ferramentas Relacionadas