"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment regrouper du JSON imbriqué dans un tableau d'objets dans Go ?

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

Publié le 2024-12-21
Parcourir:488

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 but est de transformer ce JSON en un tableau d'objets Monster.

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 de Monster objets avec des clés de chaîne.
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)
}
  • Utilisation de var data *map[string]Monster évite l'utilisation d'interface{}, garantissant que la carte résultante a le type souhaité.
  • Transmettre des données en tant que 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 Pool : Modifiez le type de clé de la carte du pool en chaîne pour correspondre aux clés des données JSON.
  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. Call FromJson : Appelez la méthode FromJson avec la chaîne JSON pour désorganiser les données dans MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. Vérifier les erreurs : Gérer toutes les erreurs renvoyées par FromJson à des fins de débogage.
  2. Accéder aux objets : Utilisez le champ Pool de MonsterCollection pour accéder aux objets Monster individuels.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3