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 d'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 d'[]interface{} tranches et les 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 naviguer dans le tableau JSON à l'aide des assertions de type comme suit :
objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])
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 rechercher l'erreur :
objects, ok := result["objects"].([]interface{})
if !ok {
// Handle error here
}
Décodage en une structure pour un accès amélioré
Si les données JSON 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 :
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"`
}
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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3