Decodificare risposte JSON
Analizzare le risposte delle API nei tipi struct di Go
Decodificare risposte JSON è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Verificare lo stato prima della decodifica
Verifichi sempre che lo stato della risposta sia 2xx prima di tentare di decodificare il corpo. Le risposte non 2xx possono contenere pagine di errore HTML anziché JSON.
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
body, _ := io.ReadAll(resp.Body)
return fmt.Errorf("status %d: %s", resp.StatusCode, body)
}json.NewDecoder
Decodifichi il corpo della risposta in streaming senza caricarlo interamente in memoria:
var result APIResponse
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
return fmt.Errorf("decode: %w", err)
}Decodifica in una mappa generica
Per strutture JSON sconosciute o dinamiche, decodifichi in map[string]any:
var m map[string]any
json.NewDecoder(resp.Body).Decode(&m)Struct annidate
Rappresenti il JSON annidato con struct Go annidate e tag json:
type Repo struct {
Name string `json:"name"`
Owner struct {
Login string `json:"login"`
} `json:"owner"`
}Campi facoltativi con puntatori
Utilizzi tipi puntatore per i campi JSON facoltativi, così da distinguere «campo assente» da «campo impostato al valore zero»:
type Response struct {
Data *string `json:"data"`
Error *string `json:"error"`
}Decodifica degli array
Decodifichi direttamente gli array JSON in slice Go:
var users []User
json.NewDecoder(resp.Body).Decode(&users)Controllo degli errori di decodifica
Distingua gli errori di sintassi JSON dagli errori di fine file imprevista: EOF significa che il corpo è vuoto, cioè non contiene alcun JSON.
err := json.NewDecoder(resp.Body).Decode(&v)
if errors.Is(err, io.EOF) {
return fmt.Errorf("empty response body")
}Controllo del Content-Type
Verifichi che il Content-Type della risposta sia application/json prima della decodifica, per evitare di analizzare silenziosamente HTML come JSON.
ct := resp.Header.Get("Content-Type")
if !strings.HasPrefix(ct, "application/json") {
return fmt.Errorf("unexpected content-type: %s", ct)
}Ignorare i campi sconosciuti
json.Decoder ignora silenziosamente i campi JSON che non hanno un campo struct corrispondente. Questo è il comportamento predefinito e in genere è auspicabile per garantire la compatibilità futura.
Decodifica rigorosa con DisallowUnknownFields
Chiami dec.DisallowUnknownFields() per restituire un errore in presenza di chiavi sconosciute: è utile per analizzare configurazioni in modo rigoroso, ma non per consumare API di terze parti.
dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
dec.Decode(&cfg)Riutilizzare la struct decodificata
Azzeri la struct prima della decodifica se la riutilizza per più risposte, così da evitare dati obsoleti provenienti da una decodifica precedente.
var result APIResult
result = APIResult{} // reset
json.NewDecoder(resp.Body).Decode(&result)Verifica rapida
Quale errore restituisce json.Decoder.Decode quando il corpo della risposta è vuoto?
Riepilogo: decodifica delle risposte JSON
Punti chiave:
- Controlli il codice di stato prima della decodifica
- json.NewDecoder per lo streaming, evitando di caricare l'intero corpo in memoria
- Verifichi che il Content-Type sia application/json
- io.EOF indica un corpo vuoto; io.ErrUnexpectedEOF indica JSON troncato
Domande Frequenti
La lezione «Decodificare risposte JSON» è gratuita?
Sì — il testo completo di «Decodificare risposte JSON» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Decodificare risposte JSON»?
Analizzare le risposte delle API nei tipi struct di Go Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Decodificare risposte JSON»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Effettuare richieste HTTP
- Impostare timeout e intestazioni
- Decodificare risposte JSON
- Gestione degli errori e logica dei tentativi