Accès aux tableaux JSON imbriqués dans Go
Dans Go, des défis surviennent lors de l'accès aux tableaux JSON imbriqués après la désorganisation. Lorsque vous tentez de récupérer un élément du tableau « objets » dans une réponse, l'erreur « type interface {} ne prend pas en charge l'indexation » peut être rencontrée.
Comprendre le problème
Par défaut, les modules JSON dans Go représentent les tableaux sous forme de tranches []interface{} et les dictionnaires sous forme de cartes map[string]interface{}. Par conséquent, lors du décodage dans une variable d'interface {}, l'accès direct aux éléments imbriqués à l'aide de l'indexation échouera.
Solution : assertion de type
Une approche pour résoudre ce problème consiste à type assertion. Cela implique de convertir la variable interface{} en type concret sous-jacent. Par exemple, pour extraire l'ITEM_ID du premier objet du tableau "objects" :
<code class="go">objects := result["objects"].([]interface{}) first := objects[0].(map[string]interface{}) fmt.Println(first["ITEM_ID"])</code>
Assertion de type avec vérification des erreurs
Lors de l'exécution d'assertions de type, il est Il est essentiel d'incorporer la vérification des erreurs pour gérer les conversions incorrectes. Exemple :
<code class="go">objects, ok := result["objects"].([]interface{}) if !ok { // Handle type conversion error }</code>
Décodage en structure
Une solution alternative, recommandée pour le JSON de format connu, consiste à décoder directement en structure personnalisée. Définissez une structure correspondant à la structure JSON et décodez-la :
<code class="go">type Result struct { Query string Count int Objects []struct { ItemId string ProdClassId string Available int } }</code>
Cela vous permet d'accéder directement aux données, éliminant ainsi le besoin d'assertions de type :
<code class="go">var result Result json.Unmarshal(payload, &result) fmt.Println(result.Objects[0].ItemId)</code>
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!