Arrays 在GO中解析json对象数组
我试图将给定的API响应解析为一个结构。 它似乎是一个数组Arrays 在GO中解析json对象数组,arrays,json,parsing,go,slice,Arrays,Json,Parsing,Go,Slice,我试图将给定的API响应解析为一个结构。 它似乎是一个数组 [ { "host_name" : "hostname", "perf_data" : "", "plugin_output" : "All good", "state" : 0 } ] 我不知道如何为它创建struct,我想到了: type ServiceData struct { HostName string `json:"host_name"`
[
{
"host_name" : "hostname",
"perf_data" : "",
"plugin_output" : "All good",
"state" : 0
}
]
我不知道如何为它创建struct,我想到了:
type ServiceData struct {
HostName string `json:"host_name"`
PerfData string `json:"perf_data"`
PluginOutput string `json:"plugin_output"`
State int `json:"state"`
}
但是没有运气
我是否应该删除最初答复中的方括号?
有人能告诉我正确的方向吗?您可以将JSON数组解组为Go片段。因此,将解组为
[]ServiceData
或[]ServiceData
类型的值:
var servicedata []*ServiceData
工作演示:
func main() {
var result []*ServiceData
if err := json.Unmarshal([]byte(src), &result); err != nil {
panic(err)
}
fmt.Printf("%+v", result[0])
}
const src = `[
{
"host_name" : "hostname",
"perf_data" : "",
"plugin_output" : "All good",
"state" : 0
}
]`
哪些输出(在上尝试):
还请注意,您可以“直接从正文”解组,无需先阅读正文
使用以下命令可执行此操作:
var servicedata []*ServiceData
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
// handle error
}
它更短、更容易阅读,而且效率更高。请注意,JSON响应是一个包含单个对象的对象数组。您试图将其解析为单个对象,但失败了。创建一个名为
ServiceData
的变量和数组,按照下面的答案解决了问题。这正是我所缺少的。谢谢
&{HostName:hostname PerfData: PluginOutput:All good State:0}
var servicedata []*ServiceData
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
// handle error
}