"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo manejar matrices anidadas en Go JSON Unmarshalling?

¿Cómo manejar matrices anidadas en Go JSON Unmarshalling?

Publicado el 2024-11-08
Navegar:964

How to Handle Nested Arrays in Go JSON Unmarshalling?

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.

Último tutorial Más>

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