Dans Go, face au défi du démarshaling des données JSON dans une interface{}, il est essentiel de comprendre comment dynamiquement gérer différents types de données en fonction de clés spécifiques. Cet article résout ce problème en fournissant une solution pour transformer JSON dans une interface générique {} dans Go.
Considérons un scénario dans lequel nous avons un type appelé Message avec une structure qui inclut un champ Cmd (chaîne) et un champ Données (interface{}). Nous avons également un type imbriqué CreateMessage qui définit une structure de données spécifique. Lors du démarshaling de données JSON telles que '{"cmd":"create","data":{"conf":{"a":1},"info":{"b":2}}}', nous rencontrons un problème où le champ Données n'est pas correctement converti au type CreateMessage approprié.
Pour résoudre ce problème, utilisez ce qui suit approche :
Voici un exemple de code extrait qui démontre la solution :
type Message struct { Cmd string `json:"cmd"` Data json.RawMessage } type CreateMessage struct { Conf map[string]int `json:"conf"` Info map[string]int `json:"info"` } func main() { var m Message if err := json.Unmarshal(data, &m); err != nil { log.Fatal(err) } switch m.Cmd { case "create": var cm CreateMessage if err := json.Unmarshal([]byte(m.Data), &cm); err != nil { log.Fatal(err) } fmt.Println(m.Cmd, cm.Conf, cm.Info) default: log.Fatal("bad command") } }
En tirant parti de cette approche, les données JSON peuvent être dynamiquement désorganisées dans les structures de données appropriées, permettant une gestion flexible des variantes de données JSON 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!