"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment gérer les tableaux imbriqués dans le démarshalling Go JSON ?

Comment gérer les tableaux imbriqués dans le démarshalling Go JSON ?

Publié le 2024-11-08
Parcourir:934

How to Handle Nested Arrays in Go JSON Unmarshalling?

Golang JSON : gestion des tableaux imbriqués avec unmarshalling

Dans Go, lorsque vous travaillez avec des tableaux JSON imbriqués après unmarshalling, il est crucial de comprendre l'erreur "le type interface {} ne prend pas en charge l'indexation." Cette erreur se produit lorsque vous tentez d'accéder à un élément d'un tableau JSON stocké dans une variable interface{}.

Pour résoudre ce problème, vous devrez utiliser des assertions de type pour convertir la variable interface{} en type de tableau sous-jacent.

Interface{} Représentation dans le module JSON

Le module JSON représente les tableaux sous forme d'[]interface{} tranches et les dictionnaires sous forme de map[string]interface{ } mappe lors du décodage en une variable d'interface {}.

Accès aux éléments imbriqués avec des assertions de type

Sans vérification des erreurs, vous pouvez naviguer dans le tableau JSON à l'aide des assertions de type comme suit :

objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])

Cependant, il est important de noter que ces assertions de type peuvent paniquer si les types ne correspondent pas. Pour éviter ce problème, vous pouvez utiliser le formulaire à deux retours et rechercher l'erreur :

objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle error here
}

Décodage en une structure pour un accès amélioré

Si les données JSON suivent un format cohérent, une solution plus efficace consiste à les décoder en un type structuré. Par exemple, sur la base des données fournies :

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

En décodant dans cette structure, vous pouvez accéder directement à l'ID de l'élément en utilisant result.Objects[0].ItemId. Cette approche élimine le besoin d'assertions de type et fournit une méthode sécurisée pour accéder aux éléments imbriqués.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3