logo
GeekFormat

JSON para Go

Cole JSON à esquerda, e as definições de tipo struct Go prontas para uso direto em projetos Go são geradas automaticamente à direita. Processamento local puro no navegador, sem registro ou upload necessário.

Sugestões Relacionadas

Sobre JSON para Go: Transformando JSON no struct fortemente tipado de Go

JSON para Go é o processo de conversão automática de dados em formato JSON para definições de tipo struct da linguagem Go. JSON é o formato de troca de dados mais comum em APIs REST, arquivos de configuração, filas de mensagens e logs, enquanto Go é uma linguagem fortemente tipada; durante o desenvolvimento, a estrutura dinâmica de JSON frequentemente precisa ser mapeada para struct antes da desserialização com encoding/json. Escrever structs manualmente, especialmente objetos aninhados, facilmente leva a campos ausentes ou tipos incorretos; esta ferramenta visa automatizar o trabalho repetitivo.

O struct de Go é um tipo de dados composto, declarado com `type Name struct { ... }`. Cada campo consiste em nome e tipo; nomes de campos devem começar com letra maiúscula para serem acessíveis por outros pacotes, os chamados 'identificadores exportados'. A ferramenta converte automaticamente nomes de campos JSON para nomes de campos exportados PascalCase, ex. `user_name` mapeia para `UserName`, com a chave original preservada na tag json.

A conversão central desta ferramenta é realizada pelo Web Worker jsonFormat no navegador, chamando o renderizador Go do quicktype-core com opções `just-types` e `no-comments`. Todo o fluxo não depende de serviços backend: o JSON de entrada é analisado localmente, tipos inferidos, código Go gerado, finalmente apresentado no editor direito.

A inferência de tipos segue o mapeamento convencional JSON para Go: strings mapeiam para `string`, booleanos para `bool`, inteiros para `int64`, floats para `float64`, arrays para slices `[]T`, objetos para structs independentes, `null` para `interface{}`. Objetos aninhados são processados recursivamente, mantendo hierarquia clara.

Comparado à escrita manual, código gerado por ferramenta é um 'primeiro rascunho executável'. Desenvolvedores geralmente só precisam ajustar nome do tipo raiz, nome do pacote, precisão do tipo de campo (ex. int64 para int) e se usar tipos ponteiro, antes de colocar em projetos Go reais. Combinado com cópia em um clique e download model.go, o trabalho repetitivo nas fases de integração e modelagem é significativamente reduzido.

Casos de uso

  • Desenvolvimento backend Go converte JSON de resposta API REST para struct, vincula diretamente a parâmetros de handler Gin/Echo/Fiber com json.Unmarshal
  • Durante integração frontend-backend, pega JSON de resposta de exemplo do Postman, gera rapidamente modelo Go para reduzir digitação manual de campos
  • Ao integrar callbacks Webhook de terceiros, converte JSON payload para struct Go para acesso e validação práticos em nível de campo
  • Converte arquivos de configuração JSON do Viper/Consul/Nacos para tipos Go, substituindo acesso fracamente tipado map[string]interface{}
  • Equipes de microsserviços unificam estrutura de requisição/resposta para interfaces gRPC/HTTP, converte JSON de exemplo para tipos Go compartilhados
  • Engenheiros de teste convertem fixture JSON para struct Go, usam com testify para testes baseados em asserções
  • DevOps analisam linhas de log JSON coletadas por ELK/Fluentd, geram struct para análise estruturada com programas Go
  • Após crawlers extraírem dados JSON, converter para struct Go, trabalhar com gorm/gen ou ent para gerar modelos de banco de dados
  • Dados de telemetria JSON reportados por dispositivos IoT convertidos para struct Go, desserialização e filtragem em programas de gateway edge
  • Converte mensagens JSON consumidas do Kafka/NATS/RabbitMQ para tipos Go, para implementação de consumidores orientados a eventos
  • Desenvolvedores SDK convertem JSON de resposta de exemplo do servidor para struct Go, escrevem no pacote types da biblioteca client para referência dos usuários
  • Converte JSON de exemplo da documentação Swagger/OpenAPI para struct Go como exemplos de código de documentação de interface
  • Estudantes ou instrutores convertem JSON de exemplo para struct durante cursos Go, demonstram sistema de tipos de Go e uso de tags json
  • Scripts de migração de dados convertem linhas JSON exportadas do MySQL/PostgreSQL para struct Go, para mapeamento de campos e validação de tipos
  • JSON de configuração CI/CD convertido para struct Go, prático para leitura de configuração fortemente tipada em ferramentas de pipeline escritas em Go
  • Projetos legados refatoram código de leitura JSON dinâmico baseado em map para acesso fortemente tipado baseado em struct

Como Usar

  1. Cole conteúdo JSON no editor esquerdo, ou arrasta e solta arquivos .json/.txt, ou clique em 'Exemplo' para carregar dados integrados.
  2. Aguarde cerca de 400ms, a ferramenta converterá automaticamente e exibirá o código struct Go gerado à direita.
  3. Se JSON tiver erros, clique no botão 'Reparar JSON' para corrigir automaticamente erros comuns de formato, depois continue a geração.
  4. Verifique a saída à direita, clique em 'Copiar' para colar no projeto Go, ou clique em 'Baixar' para salvar como arquivo model.go.

Recursos

  • Geração de struct Go local no navegador: análise JSON e geração de código Go concluídas no navegador, dados brutos não enviados ao servidor
  • Conversão automática com debounce de 400ms: sem clique manual necessário após colar ou modificar, código Go copiável é exibido em tempo real à direita
  • Inferência inteligente de tipos: strings mapeiam para string, booleanos para bool, inteiros para int64, floats para float64, arrays para slices, objetos para structs
  • Expansão automática de objetos aninhados: gera recursivamente tipos struct independentes, mantendo hierarquia JSON clara
  • Tags json geradas automaticamente: campos incluem tag `json:"nome_original"`, prontos para uso com encoding/json
  • Reparo de erros JSON em um clique: lida automaticamente com vírgulas finais, aspas simples, aspas ausentes e outros erros comuns de formato, continua geração após reparo
  • Suporta entrada colar/upload/exemplo: arrastar e soltar arquivos .json/.txt, ou carregar exemplos chineses integrados
  • Copiar e baixar em um clique: copia código Go completo para a área de transferência, ou baixa como arquivo model.go diretamente no projeto
  • Histórico de entrada localStorage: salva automaticamente entradas recentes, recuperação rápida após atualização ou fechamento acidental da página
  • Editor de tela dividida responsivo: largura de painéis esquerdo/direito ajustável, visualização confortável de entrada/saída em desktop e mobile

Exemplos de Código

Desserializar JSON com struct gerado

go

Após copiar struct gerado para o projeto, desserialize diretamente resposta API com encoding/json.

package main

import (
    "encoding/json"
    "fmt"
)

// Código gerado pela ferramenta GeekFormat JSON para Go
type User struct {
    ID      int64    `json:"id"`
    Name    string   `json:"name"`
    Tags    []string `json:"tags"`
    Address Address  `json:"address"`
}

type Address struct {
    City string `json:"city"`
}

func main() {
    data := []byte(`{
        "id": 1,
        "name": "Alice",
        "tags": ["admin", "dev"],
        "address": {"city": "Beijing"}
    }`)

    var u User
    if err := json.Unmarshal(data, &u); err != nil {
        panic(err)
    }

    fmt.Println(u.Name, u.Address.City)
}

Processar JSON com campos potencialmente ausentes

go

Se alguns campos API podem não existir, altere campos correspondentes para tipos ponteiro ou use com tag omitempty.

package main

import "encoding/json"

// Altere manualmente campos para ponteiros; quando ausentes, valor é nil
type User struct {
    ID      *int64  `json:"id,omitempty"`
    Name    *string `json:"name,omitempty"`
    Email   *string `json:"email,omitempty"`
}

func main() {
    data := []byte(`{"id": 1, "name": "Bob"}`)
    var u User
    json.Unmarshal(data, &u)
    if u.Email == nil {
        println("Campo Email ausente")
    }
}

Perguntas frequentes

Como converter JSON para struct Go?

Cole o conteúdo JSON na caixa de entrada à esquerda, a ferramenta converterá automaticamente em 400ms e exibirá o struct Go gerado à direita. Você também pode arrastar e soltar arquivos .json/.txt, ou clicar em 'Exemplo' para carregar dados integrados. Após a conversão, copie ou baixe o arquivo model.go em um clique.

O código Go gerado inclui tags json?

Sim. A ferramenta gera código Go baseado em quicktype-core, e por padrão cada campo struct inclui tag `json:"nome_original"`, prático para serialização e desserialização diretas com Unmarshal/Marshal do encoding/json.

Arrays JSON serão convertidos para slices Go?

Sim. Arrays JSON geram tipos slice correspondentes com base nos tipos de elementos, ex. `["a","b"]` gera `[]string`, `[1,2,3]` gera `[]int64`, `[{...},{...}]` gera tipos personalizados como `[]UserItem`.

Objetos aninhados gerarão vários structs?

Sim. Cada objeto aninhado gera recursivamente um tipo struct independente, nomeado em PascalCase. Por exemplo, o objeto `address` gera um struct `Address`, referenciado no struct principal através do campo `Address Address`.

Que tipo os valores null geram?

Valores null em JSON geralmente são inferidos como `interface{}`, que é o tipo de segurança padrão. Se você souber o tipo real do campo, pode adicionar um valor de exemplo no JSON, regenerar, depois ajustar manualmente para o tipo específico.

Posso personalizar o nome do struct raiz?

Sim. A ferramenta usa o nome do tipo raiz (como User) por padrão; após modificar o nome do tipo raiz nas configurações, todos os nomes de subtipos associados são atualizados sincronamente, o nome do arquivo baixado também muda consequentemente.

E se JSON tiver erros de formato?

A ferramenta detecta automaticamente a validade JSON. Se existirem erros comuns como vírgulas finais, aspas simples, aspas ausentes, aparece o botão 'Reparar JSON'. Ao clicar, a ferramenta tentará reparo automático e regenerará o struct Go; quando o reparo falhar, a posição específica do erro é indicada.

Os dados serão enviados ao servidor? É privado e seguro?

Não. Toda análise JSON, inferência de tipos e geração de código Go são concluídas no seu navegador via Web Worker; o conteúdo de entrada e o código gerado nunca são enviados a nenhum servidor, nem registrados na nuvem. JSON sensível contendo chaves API, tokens ou dados de negócios pode ser usado com segurança.

O código gerado pode ser colocado diretamente em projetos Go?

Sim. O código gerado é struct Go padrão com tags json, pode ser copiado diretamente para o diretório types/ ou models/ do projeto. Recomendamos ajustar nomes de tipos e nomes de pacote de acordo com as convenções de nomenclatura do projeto.

Esta ferramenta é gratuita? Preciso me registrar?

Completamente gratuita, sem registro ou login necessário. Abra a página e use imediatamente, sem limites de funcionalidades, marcas d'água ou login forçado.

Que tamanho de arquivos JSON é suportado?

A ferramenta não tem limite de tamanho de arquivo estrito, mas velocidade de conversão e desempenho de renderização dependem do desempenho do navegador e dispositivo. Recomendamos processar JSON dentro de 1MB para melhor experiência; para JSON superdimensionado, processe primeiro com formatador JSON ou ferramenta de divisão.

Tipos numéricos gerarão uniformemente float64?

Não. A ferramenta distingue inteiros e floats: campos inteiros geram int64, campos float geram float64. Se preferir tipos mais específicos como int, uint64, substitua manualmente após a geração.

Solução de Problemas

À direita é exibido 'Por favor insira dados JSON'

Caixa de entrada à esquerda está vazia ou contém apenas espaços em branco. Por favor cole JSON válido, ou clique em 'Exemplo' para carregar dados, ou arrasta e solta arquivos .json/.txt.

Exibe falha de análise JSON mas não encontra posição do erro

Clique no botão 'Reparar JSON' abaixo da caixa de entrada; a ferramenta tentará automaticamente reparar vírgulas finais, aspas simples, aspas ausentes, objetos estilo JS e outros problemas. Resultado modificado será destacado após reparo.

Nomes de campos gerados não respeitam convenções de nomenclatura Go

A ferramenta gera nomes de campos PascalCase a partir de chaves JSON. Se chaves contiverem chinês ou caracteres especiais, podem ser gerados nomes de campos com escape. Recomendamos alterar chaves JSON para inglês minúsculo ou snake_case, depois ajustar uniformemente após geração.

Campo null gera interface{}, quero mudar para tipo específico

Como null não pode inferir tipo específico, a ferramenta usa interface{} como fallback. Você pode dar a este campo um valor de exemplo (como "" ou 0) no JSON fonte, regenerar e depois mudar o tipo para tipo real como string/int64.

Página fica lenta após conversão de JSON grande

Renderização do navegador de JSON superdimensionado e grandes quantidades de structs consome muita memória. Recomendações: ① mantenha apenas campos chave no JSON de exemplo; ② divida em vários objetos e converta separadamente; ③ feche outras abas que consomem memória no navegador.

Tipo de elemento do array é inferido como []interface{}

Quando o array está vazio [] ou tipos de elementos são inconsistentes, a ferramenta usa interface{} como fallback. Você pode adicionar elementos de exemplo do mesmo tipo, ou alterar manualmente o tipo para tipos slice específicos como []string, []int64 após geração.

Glossário

struct
Tipo de dados composto de Go usado para combinar vários campos em um tipo. O corpo do código Go gerado por esta ferramenta consiste em várias definições struct.
slice
Tipo de array dinâmico de Go, sintaxe []T. Esta ferramenta mapeia arrays JSON para slices correspondentes, ex. []string, []int64, []UserItem.
json tag
String entre crases após campo struct Go, ex. `json:"user_name"`, usada para especificar nome do campo durante serialização/desserialização encoding/json. Esta ferramenta gera automaticamente esta tag.
interface{}
Tipo de interface vazia de Go, pode representar qualquer valor. Esta ferramenta usa interface{} como segurança padrão ao encontrar null JSON ou tipo indeterminado.
PascalCase
Estilo de nomenclatura onde cada palavra começa com letra maiúscula, ex. UserName, AddressCity. Go exige que campos exportados comecem com letra maiúscula, então esta ferramenta converte automaticamente nomes de campos JSON para PascalCase.
encoding/json
Pacote de codificação/decodificação JSON na biblioteca padrão de Go. Após structs gerados por esta ferramenta serem pareados com tags json, json.Unmarshal e json.Marshal podem ser usados diretamente.
unmarshal
Processo de analisar um fluxo de bytes JSON em um valor Go. Após gerar o struct, o uso mais comum é chamar json.Unmarshal(data, &user).
omitempty
Opção comum para tag json de Go, ex. `json:"name,omitempty"`, significa omitir saída quando campo é valor zero. Esta ferramenta não gera omitempty por padrão; adicionar manualmente conforme necessário após geração.

Tabela de referência mapeamento tipo JSON para tipo Go

Esta ferramenta infere automaticamente tipos Go correspondentes com base no tipo de valor JSON; mapeamentos comuns são os seguintes:

Exemplo valor JSONTipo Go geradoNota
"hello"stringMapeamento direto de string
true / falseboolValor booleano
42int64Número sem ponto decimal
3.14float64Número com ponto decimal
nullinterface{}Segurança padrão quando tipo específico não pode ser inferido
["a","b"][]stringArray de strings
[1,2,3][]int64Array de inteiros
[{...},{...}][]UserItemArray de objetos, tipos de elementos gerados recursivamente
{"id":1}UserObjeto gera struct independente

Recomendações de seleção de tipos numéricos comuns em Go

Ferramenta usa int64 e float64 por padrão; ajuste conforme necessidades em projetos reais:

CenárioTipo recomendadoMotivo
IDs inteiros gerais, contagensint64Consistente com padrão da ferramenta, compatível com maioria dos números JSON
PK autoincremental de banco de dados conhecida como positivauint64Evita números negativos, semântica mais clara
Sistemas 32 bits ou inteiros de pequeno intervalo explícitoint32Reduz consumo de memória
Preços, coordenadas, cálculo científicofloat64Consistente com padrão da ferramenta, precisão float padrão
Cálculo monetário precisodecimal.Decimal / intfloat64 tem risco de precisão; recomenda shopspring/decimal ou int em unidade de centavos

Privacy & Security

Todo o processamento desta ferramenta JSON para Go é concluído completamente localmente no seu navegador: análise JSON, inferência de tipos, geração de código Go são todos executados lado cliente via Web Worker; o conteúdo JSON de entrada, arquivos carregados e código Go gerado nunca são enviados a nenhum servidor, nem registrados, em cache ou armazenados na nuvem. Após fechar ou atualizar a página, todo o conteúdo de entrada e saída é automaticamente apagado da memória, apenas localStorage mantém o histórico de entradas recentes (pode ser apagado a qualquer momento). Adequado para processamento de JSON contendo chaves API, tokens, dados de negócios sensíveis.