0Pricing
Go Academy · Aula

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

  1. Fazendo requisições HTTP
  2. Definindo timeouts e cabeçalhos
  3. Decodificando respostas JSON
  4. Tratamento de errors e lógica de novas tentativas
← Voltar para Go Academy