Menghapuskan JSON ke dalam Antara Muka dalam Go
Pertimbangkan senario di mana anda mempunyai rentetan JSON dengan struktur data yang berbeza-beza bergantung pada medan tertentu, seperti sebagai medan "cmd". Anda ingin menyahmarshal JSON ini ke dalam struktur Go yang mengandungi medan dengan jenis antara muka{} dan menyesuaikannya dengan struktur data yang berbeza berdasarkan nilai "cmd".
Penyelesaian
Untuk mencapai ini, tentukan struct asas dengan medan tetap dan medan json.RawMessage untuk menyimpan data varian. Kemudian, cipta jenis struct khusus untuk setiap varian dan unmarshal kepada mereka berdasarkan arahan.
Contohnya:
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") } }
Dalam contoh ini, struct Message mewakili keseluruhan struktur mesej, yang mengandungi medan "cmd" dan medan json.RawMessage untuk menyimpan data varian. CreateMessage ialah jenis struct khusus yang mewakili varian perintah "create".
Kod menyahmarshal rentetan JSON awal ke dalam pembolehubah Mesej dan kemudian menggunakan medan "cmd" untuk menentukan varian khusus yang hendak dinyahmarshal dan dicetak.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON ke Antara Muka Go Berdasarkan Nilai Medan Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!