Como converter uma amostra JSON em tipos Go

Cole uma amostra JSON e a ferramenta escreve as declarações de tipos Go correspondentes: structs, slices, campos escalares e as tags json que ligam cada campo à sua chave. Os nomes seguem as convenções de Go, objetos aninhados podem ficar inline ou virar tipos nomeados, e formatos idênticos são declarados uma única vez.

A conversão roda nesta aba do navegador. Nada é enviado e nenhuma requisição é feita, então a página continua funcionando offline e aceita dados que você não pode enviar a terceiros.

  1. Cole ou digite o JSON que você quer modelar. O resultado é atualizado enquanto você edita, então ajuste a amostra até os tipos gerados ficarem corretos.
  2. Deixe Tipos aninhados inline marcado para obter structs anônimos dentro do pai, ou desmarque para obter tipos nomeados separados após a declaração principal.
  3. Se o JSON estiver malformado, a mensagem indica a posição e o caractere problemático fica marcado; corrija a entrada e os tipos voltam.
  4. Pressione Copiar struct Go para levar o código e Limpar para esvaziar os dois painéis. Adicione o bloco de imports por conta própria: o resultado são apenas as declarações de tipos.

Como os tipos são inferidos e o que o resultado deixa de fora

Como os tipos são inferidos de uma amostra

Números inteiros viram int quando cabem em 32 bits e int64 quando não cabem; decimais viram float64. Um número escrito como 1.0 permanece float64 mesmo parecendo inteiro, e um array que mistura inteiros e decimais vira []float64. Um array que mistura valores sem tipo em comum — número e string, objeto e número — cai para []interface{}.

Um array de objetos é mesclado em um único struct com a união das chaves, e a chave ausente em alguns itens recebe a tag omitempty. Um campo que aparece como objeto em um item e como escalar em outro vira interface{}. Strings em formato de timestamp RFC 3339 (2024-05-06T07:08:09Z) viram time.Time, o que exige adicionar o import time manualmente.

Nomes, tags e campos opcionais

Os nomes dos campos são nomes exportados de Go: user-id vira UserID, e siglas comuns como ID, URL, API e HTTP mantêm as maiúsculas. A chave original é preservada na tag do struct, então o código gerado continua correspondendo ao payload colado.

Duas chaves que resultam no mesmo nome Go recebem um sufixo numérico (UserID e UserID2), e chaves formadas apenas por símbolos viram Field, Field2 e assim por diante. Aspas e barras invertidas dentro de uma chave são escapadas na tag para que o código continue válido.

O que o resultado não é

São apenas declarações: sem cláusula package, sem imports, sem métodos e sem compilação aqui. Os tipos descrevem a amostra colada, não um schema — um campo que é null ou está ausente nessa amostra é tipado a partir do que você forneceu, então revise nulabilidade e largura numérica com um payload maior.

Documentos grandes são analisados no navegador e ficam limitados pela memória do seu dispositivo. Trate o resultado como um ponto de partida a revisar: renomeie os tipos, acrescente o que a amostra não mostrava e passe o arquivo pelo compilador depois de colar.

Ferramentas recentes: