JSON, Trabajando con streams

¿Cómo trabajar con streams json en Go?

Cuando se trabaja con estructuras JSON mediante peticiones HTTP, los datos van a ser recibidos en forma de stream y no como un slice de bytes.

Conforme se recibe el stream, la función json.NewDecoder() puede ser utilizada, esta recibe como argumento un io.Reader (retornado por http.Get) y entrega un Decoder que finalmente recibe la referencia a la estructura sobre la cual se va a decodificar.

Preparamos la estructura.

type Pais struct {
    Nombre      string
    Habitantes  int
    Capital     string
    Idiomas     []string
}

Creamos la instancia del stream.

var p Pais

Montamos sobre res el io.Reader.

res, err := http.Get("url/stream")
if err != nil {
    log.Fatal(err)
}

Realizamos la decodificación.

defer res.Body.Close()
err = json.NewDecoder(res.Body).Decode(&p)
if err != nil {
    log.Fatal(err)
}