Maison >développement back-end >Golang >Comment désassembler du JSON imbriqué avec des éléments structurellement similaires dans Go ?

Comment désassembler du JSON imbriqué avec des éléments structurellement similaires dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-13 06:49:13452parcourir

How to Unmarshal Nested JSON with Structurally Similar Elements in Go?

Désorganisation de JSON avec imbrication et similarité structurelle

Lorsqu'il s'agit de structures JSON complexes, il est courant de rencontrer des scénarios dans lesquels un élément d'une structure est du même type que la structure elle-même. Cela peut poser des défis lors du processus de désorganisation.

Dans ce cas spécifique, nous recevons une chaîne JSON qui représente un tableau de configurations de base de données. Chaque configuration de base de données contient divers attributs, notamment une liste de réplicas. Chaque réplique est également un objet JSON avec des attributs similaires à la configuration de la base de données.

Pour désassembler cette chaîne JSON, nous avons besoin d'une structure de données capable de prendre en charge l'imbrication et la similarité structurelle.

Modélisation de la structure imbriquée avec des types dynamiques

Étant donné que l'entrée JSON n'est pas une tranche de structures DBS, nous avons besoin d'un plus type de données flexible pour capturer sa structure. Une map[string]interface{} est une excellente option car elle peut représenter des paires clé-valeur avec des valeurs dynamiques.

Exemple :

type DBS struct {
    URL      string
    Port     string
    Uname    string
    Pass     string
    Authdb   string
    Replicas []DBS
}

func main() {
    raw, err := ioutil.ReadFile("./config.json")
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    var config []map[string]interface{}
    json.Unmarshal(raw, &config)

    for _, db := range config {
        d, ok := db["db"]
        if !ok {
            // Handle the case where "db" is missing
        }

        db := d.(map[string]interface{})
        url := db["url"].(string)
        port := db["port"].(string)

        var replicas []DBS
        for _, replica := range db["replicas"] {
            replicas = append(replicas, mapToDBS(replica))
        }

        // ... Other operations
    }
}

Utilisation d'un type dynamique pour analyser le JSON

Dans cet exemple, le config La variable est une tranche de cartes, ce qui lui permet de contenir les configurations de la base de données sous forme de paires clé-valeur.

Pour chaque configuration de base de données, nous récupérons le sous-objet "db" et le castons à une map[string]interface{}. Cela nous permet d'accéder aux attributs individuels tels que "url" et "port".

L'attribut "réplicas" est géré de la même manière. . Chaque réplique est un objet JSON, elle peut donc être convertie en une structure DBS à l'aide de la fonction mapToDBS().

En tirant parti de la flexibilité des types dynamiques, nous peut efficacement désorganiser la chaîne JSON et analyser sa structure imbriquée.

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