在Go 中,當面臨將JSON 資料解組到介面{}的挑戰時,了解如何動態地解組至關重要根據特定的鍵處理不同的資料類型。本文解決了這個問題,提供了一個將 JSON 解組為 Go 中的通用介面{}的解決方案。
考慮一個場景,其中我們有一個名為 Message 的類型,其結構體包括一個 Cmd 欄位(字串)和一個資料欄位(interface{})。我們也有一個巢狀類型 CreateMessage 定義了特定的資料結構。當解組諸如'{"cmd":"create","data":{"conf":{"a":1},"info":{"b":2}}}' 之類的JSON 數據時,我們遇到資料欄位未正確轉換為適當的CreateMessage 類型的問題。
要解決此問題,請採用以下方法方法:
這裡是一個範例程式碼片段示範了解決方案:
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") } }
透過利用這種方法,JSON 資料可以動態地解組到適當的資料結構中,從而能夠在Go 中靈活處理變體JSON 資料。
以上是如何在 Go 中動態地將 JSON 資料解組為通用型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!