Maison  >  Article  >  développement back-end  >  Comment désassembler les clés JSON dynamiques avec les structures Viper et Go ?

Comment désassembler les clés JSON dynamiques avec les structures Viper et Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-20 11:33:02464parcourir

How do you unmarshal dynamic JSON keys with Viper and Go structs?

Désagrégation des clés JSON dynamiques avec les structures Viper et Go

Dans Go, la gestion des données JSON avec des clés dynamiques peut être difficile. Par exemple, si vous disposez d'un fichier de configuration JSON avec un objet contenant des clés dont le nom varie, comment désassembler ces données dans une structure Go ?

Prenons le fichier de configuration JSON suivant comme exemple :

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}

Pour résoudre ce problème, vous pouvez utiliser une carte pour représenter les clés dynamiques, comme indiqué dans cette structure Go mise à jour :

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

Une fois que vous avez défini la structure, vous pouvez annuler le marshalage de la structure. Données JSON comme ceci :

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}

Si le nom des clés d'objet doit être un champ de la structure "Thing", vous pouvez ajouter une boucle pour l'attribuer après le démarshaling :

// Fix the name field after unmarshal
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}

Alternativement, un décodeur JSON personnalisé peut être utilisé pour gérer les clés dynamiques en remplaçant la méthode « Decode ». Reportez-vous à la documentation officielle de Go pour plus de détails sur cette approche.

Grâce à ces techniques, vous pouvez efficacement transformer les clés JSON dynamiques en structures Go, vous permettant ainsi de travailler avec des fichiers de configuration et des structures de données complexes.

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