登录
首页 >  Golang >  Go问答

如何通过单个json.Unmarshal解组字节数组的部分数据?

来源:stackoverflow

时间:2024-03-23 12:09:25 110浏览 收藏

对于包含字节数组响应的查询,本文介绍了一种通过一次 `json.Unmarshal` 解组字节数组中特定元素的方法。通过将响应解组到结构体中,其中数组元素指定为 `interface{}` 指针,可以高效地将第一个元素解码为未知类型对象。这种方法消除了对中间 `json.RawMessage` 数组解组的需要,从而提高了性能。

问题内容

我得到的查询响应始终是一个字节数组,可以将其解组到某种类型的数组 q 中,我只想将查询响应中的第一个元素解组为未知类型的对象(interface{}),这就是我所拥有的并且它有效。

res = Query(query)
data := struct {
    Q []json.RawMessage `json:"q"`
}{}
json.Unmarshal(res.Json, &data)
json.Unmarshal(data.Q[0], &object)

问题是,首先我将 res 解组到 json.rawmessage 数组中,然后我可以将第一个元素解组到 object 中。必须先解组,然后再次解组似乎是多余的。是否有一个性能更高的解决方案,我只需解组一次即可?


解决方案


解码为该结构:

data := struct {
    Q [1]interface{} `json:"q"`
}{
    [1]interface{}{&object},
}
if err := json.Unmarshal(res.Json, &data); err != nil {
     // handle error
}

解码器会将数组的一个元素解码为对象指向的值。

今天关于《如何通过单个json.Unmarshal解组字节数组的部分数据?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>