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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 09:05:02700parcourir

How to Safely Access Nested JSON Arrays in Go?

Déchiffrement des problèmes d'accès aux tableaux JSON dans Go

Lorsque vous travaillez avec des réponses JSON dans Go, l'accès aux éléments dans des tableaux imbriqués peut poser des problèmes. Souvent, des erreurs surviennent telles que "type interface {} ne prend pas en charge l'indexation" lors de la tentative de récupération de points de données spécifiques.

Pour résoudre ce problème, il est crucial de comprendre la nature sous-jacente des réponses JSON dans Go. Par défaut, les tableaux sont représentés sous forme de tranches []interface{}, tandis que les dictionnaires sont convertis en cartes map[string]interface{}. Par conséquent, les variables d'interface ne prennent pas en charge l'indexation.

Pour accéder aux éléments imbriqués, des assertions de type deviennent nécessaires. Une approche consiste à effectuer les opérations suivantes sans vérification d'erreur :

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

Cependant, cette méthode peut conduire à des paniques si les types ne s'alignent pas. Une approche plus robuste consiste à utiliser le formulaire à deux retours et à gérer les erreurs potentielles :

<code class="go">objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle error
}</code>

Si votre JSON suit une structure cohérente, envisagez de le décoder directement dans un type personnalisé :

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

Une fois décodé, vous pouvez accéder de manière transparente aux éléments imbriqués comme result.Objects[0].ItemId.

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