gpt4 book ai didi

json - 使用不同的键解码相同的 json 对象以进行 slice 结构

转载 作者:行者123 更新时间:2023-12-02 17:11:38 26 4
gpt4 key购买 nike

我不知道如何在不重写整个解析器的情况下使用不同的键将相同的 JSON 对象序列化为 Go slice 结构。例如,我可以收到的 JSON,它可能包含具有不同 key 的 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 main

import (
"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 slice/数组因为我不知道我可能会收到多少个 HostStatus 对象以及每个对象的 key 是什么。

例如类似

type Test struct {
Stats struct {
LocalHostList []HostStatus `json:"localhost[0-9]"`
} `json:"stats"`
}

并使用类似 localhost[0-9] 的东西——即正则表达式语义,这将给 JSON 包带来影响。

最佳答案

试试这个:

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

关于json - 使用不同的键解码相同的 json 对象以进行 slice 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com