Maison > développement back-end > Golang > Comment regrouper les clés JSON dynamiques dans des champs Struct dans Go ?

Comment regrouper les clés JSON dynamiques dans des champs Struct dans Go ?

Patricia Arquette
Libérer: 2024-11-19 01:26:02
original
976 Les gens l'ont consulté

How to Unmarshal Dynamic JSON Keys into Struct Fields in Go?

Désorganisation des clés JSON dynamiques dans des champs de structure dans Go

Les clés JSON dynamiques peuvent poser un défi lors de la désorganisation en structures avec des noms de champs statiques. Considérez le fichier de configuration JSON suivant :

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}
Copier après la connexion

Pour représenter ce JSON dans une structure Go, vous pouvez utiliser une carte au lieu de noms de champs statiques :

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
Copier après la connexion

Ensuite, désorganisez le JSON en utilisant la fonction json.Unmarshal :

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}
Copier après la connexion

Avec cette approche, les clés dynamiques deviennent les clés de la carte, vous permettant d'accéder les valeurs selon vos besoins.

Cependant, si la clé doit être membre de la structure Thing, vous pouvez écrire une boucle pour ajouter la clé après le démarshalling :

type Thing struct {
    Name string `json:"-"` // add the field
    Key1 string
    Key2 string
}

...

// Fix the name field after unmarshal
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}
Copier après la connexion

Cette méthode vous permet avoir à la fois la clé comme champ et les valeurs dynamiques.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal