Maison > développement back-end > Golang > le corps du texte

Comment accéder aux tableaux JSON imbriqués dans Golang après le déclassement ?

Mary-Kate Olsen
Libérer: 2024-11-04 18:54:02
original
424 Les gens l'ont consulté

How to Access Nested JSON Arrays in Golang After Unmarshalling?

Accès au tableau JSON imbriqué dans Golang après le démarshalling

Lorsque vous travaillez avec des réponses JSON dans Golang, vous pouvez rencontrer des difficultés pour accéder aux éléments d'un JSON imbriqué tableau. Cela peut se produire lorsque vous essayez d'accéder à un élément spécifique dans le tableau "objects", ce qui entraîne une erreur du type "type interface {} ne prend pas en charge l'indexation".

Cause de l'erreur

L'erreur survient car les variables d'interface dans Go ne prennent pas en charge l'indexation. Lorsque vous décodez la charge utile JSON en variable d'interface, le module JSON représente les tableaux sous forme de tranches []interface{} et les dictionnaires sous forme de cartes map[string]interface{}.

Solution 1 : Utilisation des assertions de type

Pour accéder à un élément spécifique dans le tableau "objects", vous pouvez utiliser des assertions de type pour convertir la variable d'interface en un type concret. Cependant, cette approche nécessite une vérification des erreurs pour gérer les cas où l'assertion de type échoue.

<code class="go">objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])</code>
Copier après la connexion

Solution 2 : décodage en structure

Si la charge utile JSON a un format connu, une solution plus robuste consiste à le décoder directement dans une structure personnalisée. Cela vous permet de définir la structure attendue, éliminant ainsi le besoin d'assertions de type et de gestion des erreurs.

<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"`
}

var result Result
if err := json.Unmarshal(payload, &result); err != nil {
    panic(err)
}
fmt.Println(result.Objects[0].ItemId)</code>
Copier après la connexion

En choisissant la solution appropriée en fonction du cas d'utilisation spécifique, vous pouvez accéder de manière transparente aux tableaux JSON imbriqués dans Golang après démarchage.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal