我不知道如何在不重写整个解析器的情况下使用不同的键将相同的 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 关注
- 87 浏览
添加回答
举报
0/150
提交
取消