为了账号安全,请及时绑定邮箱和手机立即绑定

使用不同的键解组相同的 json 对象以进行切片结构

使用不同的键解组相同的 json 对象以进行切片结构

Go
慕后森 2023-07-17 16:44:46
我不知道如何在不重写整个解析器的情况下使用不同的键将相同的 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 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

尝试这个:

type Test struct {
    Stats map[string]HostStatus `json:"stats"`
    }


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信