Analizar matriz JSON anidada de un archivo.
Tengo un archivo json llamado sample.json
que contiene un array json de la siguiente manera:
[
{
"time": "2021-01-04T00:11:32.362Z",
"extra_data": {
"id": "123"
},
"info": "evento123"
},
{
"time": "2021-01-05T00:11:32.362Z",
"extra_data": {
"id": "456"
},
"info": "evento456"
},
{
"time": "2021-01-06T00:11:32.362Z",
"extra_data": {
"id": "789"
},
"info": "evento789"
}
]
Estoy intentando deserializar este array json para que, para cada objeto json (es decir, evento), pueda acceder a los valores id
e info
. Esto es lo que tengo hasta ahora:
func main() {
file, err := ioutil.ReadFile("/Users/janedoe/Downloads/sample.json")
var events Event
json.Unmarshal([]byte(file), &events)
fmt.Println(reflect.TypeOf(events))
// Reading each value by its key for each event
fmt.Println("Evento123_Tiempo:", events.Timestamp,
"\nEvento123_ExtraData_Id:", events.ExtraData.Id,
"\nEvento123_Info:", events.Info)
}
type Event struct {
Time string `json:"time"`
ExtraData ExtraData `json:"extra_data"`
Info string `json:"info"`
}
type ExtraData struct {
Id string `json:"id"`
}
La salida que estoy obteniendo es:
main.Event
Evento123_Tiempo:
Evento123_ExtraData_Id:
Evento123_Info:
No estoy obteniendo ningún valor, lo que indica que el deserializado no está sucediendo como se espera. ¿Cómo puedo solucionarlo?
davy.ai
El problema es que estás intentando deserializar una matriz JSON en una única instancia de la estructura
Event
en lugar de una matriz de estructurasEvent
. Para solucionar esto, debes cambiar la variableevents
a una matriz de estructurasEvent
:Luego, puedes iterar sobre la matriz y acceder a los valores
id
einfo
para cada evento:El código completo con los cambios necesarios es:
Ten en cuenta que también agregué manejo de errores para verificar cualquier problema al leer el archivo o deserializar los datos JSON.