0Pricing
Go Academy · Lección

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

  1. Realización de solicitudes HTTP
  2. Configuración de tiempos de espera y headers
  3. Decodificación de respuestas JSON
  4. Gestión de errores y lógica de reintentos
← Volver a Go Academy