Maison  >  Article  >  développement back-end  >  Comment accéder aux tableaux JSON imbriqués dans Go ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 14:54:30898parcourir

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>

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!

Déclaration:
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