¿Cómo decodificar un json en Go?
De igual forma que podemos convertir una estructura en una estructura JSON utilizando json.Marshal
, podemos convertir un JSON en forma de slice de bytes a una estructura de Go utilizando json.Unmarshal
.
Primero necesitamos la estructura sobre la cual se va a decodificar el JSON.
type Pais struct {
Nombre string
Habitantes int
Capital string
Idiomas []string
}
Ahora preparamos el string con la estructura JSON.
datosJson := `{"nombre":"Canada","habitantes":37314442,"capital":"Ottawa","idiomas":["Inglés","Frances"]}`
Preparamos la estructura que recibirá la el json decodificado.
p := Pais{}
Y usamos json.Unmarshal
para transformar el slice de bytes en una estructura. Si este proceso no se puede realizar se generará un error.
err := json.Unmarshal([]byte(datosJson), &p)
Si revisamos el programa de forma completa, lucirá de esta forma.
package main
import (
"encoding/json"
"fmt"
"log"
)
type Pais struct {
Nombre string
Habitantes int
Capital string
Idiomas []string
}
func main() {
datosJson := `{"nombre":"Canada","habitantes":37314442,"capital":"Ottawa","idiomas":["Inglés","Frances"]}`
p := Pais{}
err := json.Unmarshal([]byte(datosJson), &p)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", p)
}
Si ejecutamos el programa, podremos ver el json convertido en estructura.
$ go run main.go
{Nombre:Canada Habitantes:37314442 Capital:Ottawa Idiomas:[Inglés Frances]}