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

Comment accéder aux tableaux JSON imbriqués dans Go ?

Susan Sarandon
Libérer: 2024-11-04 14:54:30
original
943 Les gens l'ont consulté

How Do I Access Nested JSON Arrays in Go?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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