Decodificación de respuestas JSON
Análisis de respuestas de API en structs de Go
Decodificación de respuestas JSON es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Compruebe el estado antes de decodificar
Verifique siempre que el estado de la respuesta sea 2xx antes de intentar decodificar el cuerpo. Las respuestas que no son 2xx pueden contener páginas de error HTML en lugar de 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 la respuesta en flujo sin cargarla completamente en memoria:
var result APIResponse
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
return fmt.Errorf("decode: %w", err)
}Decodificación en un mapa genérico
Para estructuras JSON desconocidas o dinámicas, decodifique en map[string]any:
var m map[string]any
json.NewDecoder(resp.Body).Decode(&m)Estructuras anidadas
Modele el JSON anidado con estructuras Go anidadas y etiquetas json:
type Repo struct {
Name string `json:"name"`
Owner struct {
Login string `json:"login"`
} `json:"owner"`
}Campos opcionales con punteros
Use tipos puntero para los campos JSON opcionales, de modo que pueda distinguir entre «campo ausente» y «campo establecido en el valor cero»:
type Response struct {
Data *string `json:"data"`
Error *string `json:"error"`
}Decodificación de arrays
Decodifique los arrays JSON directamente en slices de Go:
var users []User
json.NewDecoder(resp.Body).Decode(&users)Comprobación de errores de decodificación
Distinga los errores de sintaxis JSON de los errores de fin de entrada inesperado: EOF significa que el cuerpo está vacío, es decir, que no contiene JSON.
err := json.NewDecoder(resp.Body).Decode(&v)
if errors.Is(err, io.EOF) {
return fmt.Errorf("empty response body")
}Comprobación de Content-Type
Verifique que el Content-Type de la respuesta sea application/json antes de decodificar, para evitar analizar HTML como JSON sin detectarlo.
ct := resp.Header.Get("Content-Type")
if !strings.HasPrefix(ct, "application/json") {
return fmt.Errorf("unexpected content-type: %s", ct)
}Ignorar campos desconocidos
json.Decoder ignora silenciosamente los campos JSON que no tienen un campo correspondiente en la estructura. Este es el comportamiento predeterminado y normalmente resulta conveniente para mantener la compatibilidad futura.
Decodificación estricta con DisallowUnknownFields
Llame a dec.DisallowUnknownFields() para devolver un error cuando haya claves desconocidas; resulta útil al analizar configuraciones estrictas, pero no al consumir API de terceros.
dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
dec.Decode(&cfg)Reutilización de la estructura decodificada
Restablezca la estructura a cero antes de decodificar si la reutiliza para varias respuestas, a fin de evitar datos obsoletos de una decodificación anterior.
var result APIResult
result = APIResult{} // reset
json.NewDecoder(resp.Body).Decode(&result)Comprobación rápida
¿Qué error devuelve json.Decoder.Decode cuando el cuerpo de la respuesta está vacío?
Resumen: decodificación de respuestas JSON
Puntos clave:
- Compruebe el código de estado antes de decodificar
- json.NewDecoder permite procesar en flujo y evita cargar todo el cuerpo en memoria
- Verifique que Content-Type sea application/json
- io.EOF significa que el cuerpo está vacío; io.ErrUnexpectedEOF significa que el JSON está truncado
Preguntas frecuentes
¿La lección «Decodificación de respuestas JSON» es gratis?
Sí — el texto completo de «Decodificación de respuestas JSON» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Decodificación de respuestas JSON»?
Análisis de respuestas de API en structs de Go Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Decodificación de respuestas JSON»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Realización de solicitudes HTTP
- Configuración de tiempos de espera y headers
- Decodificación de respuestas JSON
- Gestión de errores y lógica de reintentos