Decodificando respostas JSON
Analise respostas de APIs em structs Go
Decodificando respostas JSON é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Verifique o status antes de decodificar
Sempre verifique se o status da resposta está na faixa 2xx antes de tentar decodificar o corpo. Respostas que não estão na faixa 2xx podem conter páginas de erro HTML, não JSON.
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
body, _ := io.ReadAll(resp.Body)
return fmt.Errorf("status %d: %s", resp.StatusCode, body)
}json.NewDecoder
Decodifique o corpo da resposta em fluxo sem carregá-lo totalmente na memória:
var result APIResponse
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
return fmt.Errorf("decode: %w", err)
}Decodificação em um mapa genérico
Para estruturas JSON desconhecidas ou dinâmicas, decodifique em map[string]any:
var m map[string]any
json.NewDecoder(resp.Body).Decode(&m)Estruturas aninhadas
Modele JSON aninhado com estruturas Go aninhadas e tags json:
type Repo struct {
Name string `json:"name"`
Owner struct {
Login string `json:"login"`
} `json:"owner"`
}Campos opcionais com ponteiros
Use tipos de ponteiro para campos JSON opcionais, para distinguir entre "campo ausente" e "campo definido como valor zero":
type Response struct {
Data *string `json:"data"`
Error *string `json:"error"`
}Decodificação de matrizes
Decodifique matrizes JSON diretamente em fatias Go:
var users []User
json.NewDecoder(resp.Body).Decode(&users)Verificação de erros de decodificação
Diferencie erros de sintaxe JSON de erros de EOF inesperado — EOF significa que o corpo está vazio (não há JSON).
err := json.NewDecoder(resp.Body).Decode(&v)
if errors.Is(err, io.EOF) {
return fmt.Errorf("empty response body")
}Verificação de Content-Type
Verifique se o Content-Type da resposta é application/json antes de decodificar, para evitar analisar HTML silenciosamente como JSON.
ct := resp.Header.Get("Content-Type")
if !strings.HasPrefix(ct, "application/json") {
return fmt.Errorf("unexpected content-type: %s", ct)
}Ignorando campos desconhecidos
json.Decoder ignora silenciosamente campos JSON que não têm um campo correspondente na estrutura. Esse é o comportamento padrão e geralmente é desejável para manter a compatibilidade futura.
Decodificação estrita com DisallowUnknownFields
Chame dec.DisallowUnknownFields() para retornar um erro quando houver chaves desconhecidas — útil para analisar configurações de forma estrita, mas não para consumir APIs de terceiros.
dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
dec.Decode(&cfg)Reutilização da estrutura decodificada
Zere a estrutura antes de decodificar se ela for reutilizada em várias respostas, para evitar dados obsoletos de uma decodificação anterior.
var result APIResult
result = APIResult{} // reset
json.NewDecoder(resp.Body).Decode(&result)Verificação rápida
Qual erro json.Decoder.Decode retorna quando o corpo da resposta está vazio?
Recapitulação: decodificação de respostas JSON
Pontos principais:
- Verifique o código de status antes de decodificar
- json.NewDecoder para processamento em fluxo; evita manter o corpo inteiro na memória
- Verifique se Content-Type é application/json
- io.EOF significa corpo vazio; io.ErrUnexpectedEOF significa JSON truncado
Perguntas Frequentes
A aula “Decodificando respostas JSON” é grátis?
Sim — o texto completo de “Decodificando respostas JSON” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Decodificando respostas JSON”?
Analise respostas de APIs em structs Go Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Decodificando respostas JSON”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fazendo requisições HTTP
- Definindo timeouts e cabeçalhos
- Decodificando respostas JSON
- Tratamento de errors e lógica de novas tentativas