Gere tipos Go a partir de exemplos JSON completos
Infira structs e mapas raw Go localmente, preserve lexemas numéricos com json.Number e entenda os ponteiros opcionais.
Espaço de trabalho da ferramenta
JSON para Go
Declarações Go 1.22+; apenas encoding/json e biblioteca padrão.
Todos os números usam json.Number para preservar seus lexemas. Ponteiros opcionais aceitam null mesmo sem amostra null e reduzem ausência/null a nil; omitempty pode omitir null explícito. Raw preserva o token null. Structs não exigem campos obrigatórios nem rejeitam null escalar. Chaves fora do subconjunto de tags ampliam o objeto inteiro para um mapa raw.
Ative JavaScript para gerar código. Você pode ler e editar o JSON.
Este navegador não consegue iniciar o Worker local. A geração está indisponível.
Todos os elementos e documentos contribuem para o mesmo contrato. Um array na raiz continua sendo um array. Ausência de campo é diferente de null.
Até 20 documentos, 1.000.000 de unidades UTF-16 de entrada e 2.000.000 de saída; outros limites de recursos também se aplicam.
Seu JSON é processado localmente em um Worker do navegador. Não é enviado nem armazenado.
Ao mudar para um documento, apenas o exemplo ativo será mantido. Confirme ou cancele.
Use entre 1 e 64 letras e dígitos ASCII, começando por uma letra. Nomes reservados são rejeitados.
Pronto para inserir JSON.
Alguns detalhes de diagnóstico foram omitidos. Os totais de avisos continuam visíveis.
Detalhes dos nomes
A área de transferência está indisponível ou a permissão foi negada. Baixe o arquivo ou abra explicitamente o código completo para copiar. Um arquivo grande pode demorar para aparecer.
Exemplos completos e arrays raiz
Cole JSON estrito ou escolha um arquivo UTF-8 local. Gere a partir de um documento ou até vinte exemplos completos. Todos os elementos e campos tardios contribuem; um array raiz permanece array. Entradas vazias, chaves decodificadas duplicadas, comentários, vírgulas finais e documentos concatenados interrompem a geração preservando os exemplos.
O editor mostra o exemplo ativo e o total. Após gerar, confira o nome do arquivo, a expressão do tipo raiz, a quantidade de nós JSON e o tamanho do código completo. Esses dados descrevem o resultado atual; copiar e baixar incluem todo o arquivo mesmo quando a prévia está limitada.
[{"id":1},{"id":2,"nombre":"Ana"}]
package generated
import "encoding/json"
type RootItem struct {
Id json.Number `json:"id"`
Nombre *string `json:"nombre,omitempty"`
}
type Root []RootItem
Tags exatas, mapas e presença com ponteiros
Chaves não vazias que correspondem a [A-Za-z0-9_ .:/-]+ recebem campos exportados com tags json exatas. A chave literal - usa json:"-," ou json:"-,omitempty". Colisões alteram apenas identificadores Go. Qualquer outra chave, incluindo aspas, vírgula, backslash, backtick, controles ou Unicode, amplia o objeto inteiro para um map[string]json.RawMessage nomeado, preservando todas as chaves Unicode válidas. Substitutos isolados em chaves interrompem a geração. Objetos vazios também usam mapas raw.
Ausência usa *T e omitempty, exceto nos campos raw. T com null observado usa apenas um ponteiro. False, zero e string vazia presentes mantêm ponteiros não nil. Ponteiros opcionais aceitam null mesmo sem essa amostra; ausência e null tornam-se nil, e uma serialização posterior pode omitir null explícito. Raw distingue ausência nil do token null recebido. Go não valida campos obrigatórios nem rejeita null escalar na desserialização. Os avisos explicam essas capacidades; os tipos não validam dados em execução nem garantem round-trip global.
Números e exportação local completa
Todo número usa json.Number, incluindo 9007199254740993, 1.0, 1e3 e -0. String() preserva o lexema sem conversão para float64. Avisos de precisão do parser continuam visíveis e não significam perda por json.Number. Unknown, somente null e uniões com duas ou mais variantes não null usam json.RawMessage com avisos. Raízes number/raw usam aliases que preservam unmarshalling; objeto/null usa alias de ponteiro. Apenas declarações alcançáveis e imports necessários são emitidos em package generated, sem desserializador próprio.
Limites: 20 amostras, 1.000.000 unidades UTF-16 de entrada, 4.000.000 bytes UTF-8 agregados e por arquivo, profundidade 200, 100.000 nós/visitas de inferência, 1.000.000 unidades de parsing, 10.000 tipos, 20.000 campos, 2.000.000 unidades de fusão, 2.000 declarações, 4.000.000 unidades de emissão e 15 segundos. Saída: 2.000.000 unidades UTF-16 e 8.000.000 bytes. Os máximos não podem necessariamente ser atingidos juntos; ultrapassar um limite não produz código parcial.
A prévia contém até 20.000 unidades UTF-16; copiar e baixar incluem todo types.go atual como text/plain;charset=utf-8, UTF-8 sem BOM e LF final. São exibidos até 100 diagnósticos e 50 linhas de nomes com 10.000 unidades totais, indicando omissões. Clipboard negado oferece cópia manual explícita do código completo. Um BOM inicial é retirado apenas no parsing; posições usam o texto original. Cancelar encerra o Worker; edição, modo, ordem e opções invalidam a saída. O processamento fica em Worker local, offline após carregar os assets, sem uploads, armazenamento ou dados nos links relacionados. JavaScript e Worker são necessários; Go gerado não é compilado nem executado no navegador.