Golang JSON: manejo de matrices anidadas con desclasificación
En Go, cuando se trabaja con matrices JSON anidadas después de la desclasificación, es fundamental comprender el error "La interfaz de tipo {} no admite la indexación". Este error surge cuando intentas acceder a un elemento dentro de una matriz JSON almacenada en una variable de interfaz{}.
Para resolver este problema, necesitarás utilizar aserciones de tipo para convertir la variable de interfaz{} a la tipo de matriz subyacente.
Interfaz{} Representación en el módulo JSON
El módulo JSON representa matrices como []interfaz{} sectores y diccionarios como mapa[cadena]interfaz{ } se asigna al decodificar en una variable de interfaz{}.
Acceso a elementos anidados con aserciones de tipo
Sin verificación de errores, puede navegar por la matriz JSON usando aserciones de tipo de la siguiente manera :
objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])
Sin embargo, es importante tener en cuenta que estas afirmaciones de tipos pueden causar pánico si los tipos no coinciden. Para evitar este problema, puede utilizar el formulario de dos devoluciones y verificar el error:
objects, ok := result["objects"].([]interface{})
if !ok {
// Handle error here
}
Decodificación en una estructura para mejorar el acceso
Si los datos JSON siguen un formato consistente, una solución más eficiente es decodificarlos en un tipo estructurado. Por ejemplo, según los datos proporcionados:
type Result struct {
Query string `json:"query"`
Count int `json:"count"`
Objects []struct {
ItemId string `json:"ITEM_ID"`
ProdClassId string `json:"PROD_CLASS_ID"`
Available int `json:"AVAILABLE"`
} `json:"objects"`
}
Al decodificar en esta estructura, puede acceder directamente al ID del elemento usando result.Objects[0].ItemId. Este enfoque elimina la necesidad de afirmaciones de tipo y proporciona un método seguro para acceder a elementos anidados.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3