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
}
}
Copier après la connexion
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
}
Copier après la connexion
Solution
Pour y parvenir, suivez ces étapes :
-
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
}
Copier après la connexion
-
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)
}
Copier après la connexion
- 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.
-
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.
-
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"`
}
Copier après la connexion
-
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)
Copier après la connexion
-
Vérifiez les erreurs : Gérez toutes les erreurs renvoyées par FromJson à des fins de débogage.
-
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)
}
Copier après la connexion
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!