Maison >développement back-end >Golang >Comment regrouper du JSON imbriqué dans un tableau d'objets dans Go ?

Comment regrouper du JSON imbriqué dans un tableau d'objets dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-25 10:59:14368parcourir

How to Unmarshal Nested JSON into an Array of Objects in Go?

Désagrégation du JSON imbriqué dans un tableau d'objets dans Go

Problème

Considérez les données JSON suivantes :

{
   "1001":{
      "level":10,
      "monster-id":1001,
      "skill-level":1,
      "aimer-id":301
   },
   "1002":{
      "level":12,
      "monster-id":1002,
      "skill-level":1,
      "aimer-id":302
   },
   "1003":{
      "level":16,
      "monster-id":1003,
      "skill-level":2,
      "aimer-id":303
   }
}

Le le but est de transformer ce JSON en un tableau de Monster objets.

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}

Solution

Pour y parvenir, suivez ces étapes :

  1. Définissez MonsterCollection : Créez un type MonsterCollection pour contenir une carte d'objets Monster avec de la ficelle clés.
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. Implémenter la méthode FromJson : Définir une méthode FromJson sur le type MonsterCollection pour gérer le démarshaling.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
  • L'utilisation de var data *map[string]Monster évite l'utilisation de l'interface{}, garantissant que la carte résultante a le type souhaité.
  • La transmission des données sous forme de pointeur garantit que les modifications apportées lors du démarshalage sont reflétées dans le champ Pool de MonsterCollection.
  1. Corriger le type de clé dans le pool : Modifiez le type de clé de la carte du pool en chaîne pour correspondre aux clés du JSON data.
  2. Utilisez les balises Struct : Ajoutez des balises de structure JSON à la structure Monster pour spécifier les noms de champs dans les données JSON.
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
  1. Appelez FromJson : Appelez la méthode FromJson avec la chaîne JSON pour désorganiser les données dans le MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. Vérifiez les erreurs : Gérez toutes les erreurs renvoyées par FromJson à des fins de débogage.
  2. Accédez aux objets : Utilisez le champ Pool de la MonsterCollection pour accéder au monstre individuel objets.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}

En suivant ces étapes, vous pouvez réussir à désassembler les données JSON imbriquées dans un tableau d'objets Monster dans Go.

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