Maison >développement back-end >Golang >Comment gérer les tableaux imbriqués dans le démarshalling Go JSON ?
Golang JSON : gestion des tableaux imbriqués avec unmarshalling
Dans Go, lorsque vous travaillez avec des tableaux JSON imbriqués après unmarshalling, il est crucial de comprendre l'erreur "le type interface {} ne prend pas en charge l'indexation." Cette erreur se produit lorsque vous tentez d'accéder à un élément dans un tableau JSON stocké dans une variable interface{}.
Pour résoudre ce problème, vous devrez utiliser des assertions de type pour convertir la variable interface{} en type de tableau sous-jacent.
Interface{} Représentation dans le module JSON
Le module JSON représente les tableaux sous forme de tranches []interface{} et de dictionnaires sous forme de map[string]interface{ } mappe lors du décodage en une variable d'interface {}.
Accès aux éléments imbriqués avec des assertions de type
Sans vérification des erreurs, vous pouvez parcourir le tableau JSON à l'aide des assertions de type comme suit :
<code class="go">objects := result["objects"].([]interface{}) first := objects[0].(map[string]interface{}) fmt.Println(first["ITEM_ID"])</code>
Cependant, il est important de noter que ces assertions de type peuvent paniquer si les types ne correspondent pas. Pour éviter ce problème, vous pouvez utiliser le formulaire à deux retours et vérifier l'erreur :
<code class="go">objects, ok := result["objects"].([]interface{}) if !ok { // Handle error here }</code>
Décodage en structure pour un accès amélioré
Si le JSON les données suivent un format cohérent, une solution plus efficace consiste à les décoder en un type structuré. Par exemple, sur la base des données fournies :
<code class="go">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"` }</code>
En décodant dans cette structure, vous pouvez accéder directement à l'ID de l'élément en utilisant result.Objects[0].ItemId. Cette approche élimine le besoin d'assertions de type et fournit une méthode sécurisée pour accéder aux éléments imbriqués.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!