Désorganisation de JSON dans des interfaces dans Go
Considérez le scénario dans lequel vous disposez d'une chaîne JSON avec des structures de données variées en fonction d'un champ spécifique, tel comme champ "cmd". Vous souhaitez désassembler ce JSON dans une structure Go contenant un champ avec un type interface{} et l'adapter à différentes structures de données en fonction de la valeur "cmd".
Solution
Pour y parvenir, définissez une structure de base avec des champs fixes et un champ json.RawMessage pour contenir les données variantes. Ensuite, créez des types de structure spécifiques pour chaque variante et désorganisez-les en fonction de la commande.
Par exemple :
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") } }
Dans cet exemple, la structure Message représente la structure globale du message, contenant le champ "cmd" et un champ json.RawMessage pour contenir les données des variantes. CreateMessage est un type de structure spécifique représentant la variante de commande "create".
Le code désorganise la chaîne JSON initiale dans une variable Message, puis utilise le champ "cmd" pour déterminer quelle variante spécifique doit être désorganisée et imprimée.
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!