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!