Maison >développement back-end >Golang >Comment désorganiser efficacement JSON dans un tableau de structures Go ?
Désorganisation de JSON dans un tableau d'objets dans Go
Vous rencontrez un défi en essayant d'analyser un objet JSON dans un tableau de structures personnalisées . Le JSON que vous avez fourni semble cependant invalide car il manque des virgules entre les paires clé-valeur dans l'objet de niveau supérieur. Voici le JSON corrigé et formaté :
{ "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 } }
Votre première tentative d'analyse du JSON a rencontré une erreur car vous avez attribué la carte résultant de la désorganisation du JSON à une interface{} valeur. Lors de l'indexation de cette carte, vous devez saisir à nouveau assert la valeur avec v.(map[string]interface{}) et chaque fois que vous récupérez une clé de la carte.
De plus, vous avez tenté d'insérer un int comme clé d'une carte avec des chaînes comme clés, ce qui entraînerait une erreur supplémentaire.
Pour simplifier le unmarshalling traiter et éviter les assertions de type manuelles, vous pouvez utiliser une technique dans laquelle vous fournissez directement la désorganisation avec le type de données cible. Voici un exemple mis à jour :
package main import ( "encoding/json" ) type Monster struct { MonsterId int32 `json:"monster-id"` Level int32 `json:"level"` SkillLevel int32 `json:"skill-level"` AimerId int32 `json:"aimer-id"` } type MonsterCollection struct { Pool map[string]Monster } func (mc *MonsterCollection) FromJson(jsonStr string) error { var data = &mc.Pool b := []byte(jsonStr) return json.Unmarshal(b, data) } func main() { jsonString := `{ "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 } }` mc := MonsterCollection{} if err := mc.FromJson(jsonString); err != nil { // Handle error } for _, monster := range mc.Pool { // Access monster data here } }
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!