Arrays 在GO中解析json对象数组

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"`

我试图将给定的API响应解析为一个结构。 它似乎是一个数组

[
   {
      "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
}