我不知道如何在不重寫整個解析器的情況下使用不同的鍵將相同的 JSON 對象序列化為 Go 切片結構。例如,我可以收到的 JSON,它可能包含具有不同密鑰的 N 個對象(localhost1/localhost2/localhost3 等)。在這個例子中,我有一個鍵 localhost1/localhost2/localhost3,每個鍵只有一個字段就可以了。{"stats": { "localhost1": { "ok": 1 }, "localhost2": { "ok": 1 }, "localhost3": { "ok": 1 } }}我可以使用以下結構映射來解壓縮整個 JSON。type HostStatus struct { Ok int `json:"ok"`}type Test struct { Stats struct { Localhost1 HostStatus `json:"localhost1"` Localhost2 HostStatus `json:"localhost2"` Localhost3 HostStatus `json:"localhost3"` } `json:"stats"`}整個示例。package mainimport ( "encoding/json" "fmt")type HostStatus struct { Ok int `json:"ok"`}type Test struct { Stats struct { Localhost1 HostStatus `json:"localhost1"` Localhost2 HostStatus `json:"localhost2"` Localhost3 HostStatus `json:"localhost3"` } `json:"stats"`}func main() { var resp = []byte(`{ "stats": { "localhost1": { "ok": 1 }, "localhost2": { "ok": 1 }, "localhost3": { "ok": 1 } } }`) var r Test er := json.Unmarshal(resp, &r) if er != nil { panic(er) } else { fmt.Println(r) }}該解決方案的主要問題是,它需要在每個 HostStatus 的 Stats 結構中進行硬編碼,通過 json:xxx 標記將 1:1 映射到 JSON 輸出。但我想找到一種方法將所有這些對象映射到 HostStatus 切片/數組,因為我不知道我可能會收到多少個 HostStatus 對象以及每個對象的鍵是什么。
- 1 回答
- 0 關注
- 122 瀏覽
添加回答
舉報
0/150
提交
取消