首页 >后端开发 >Golang >如何在 Go 中将 JSON 嵌套对象解组为字节数组?

如何在 Go 中将 JSON 嵌套对象解组为字节数组?

Linda Hamilton
Linda Hamilton原创
2024-12-02 15:13:12412浏览

How to Unmarshal JSON Nested Objects as Byte Arrays in Go?

将 JSON 嵌套对象解组为字符串或字节数组

处理 JSON 响应时,可能需要将某些嵌套对象保留为原始字符串或字节数组,而不是将它们解析为 Go 结构。为了解决这个问题,我们将探索使用encoding/json包中的json.RawMessage类型的解决方案。

在您的特定场景中,以下JSON:

{
    "id"  : 15,
    "foo" : { "foo": 123, "bar": "baz" }
}

将被解组转换为具有 int64 类型的 ID 字段和 []byte 类型的 Foo 字段的 Go 结构。您遇到的错误“json: 无法将对象解组为 []uint8 类型的 Go 值”,表明解组过程正在尝试将 foo 对象解析为 Go 值,这不是预期的行为。

json.RawMessage 类型为这个问题提供了解决方案。正如其文档所述,它是“原始编码的 JSON 对象”,可用于延迟 JSON 解码或预先计算 JSON 编码。使用 json.RawMessage,您可以有效地将 foo 对象保留为 Go 结构中的原始字节数组:

import (
    "encoding/json"
    "fmt"
)

type Bar struct {
    ID  int64           `json:"id"`
    Foo json.RawMessage `json:"foo"`
}

func main() {
    var jsonStr = []byte(`{
    "id"  : 15,
    "foo" : { "foo": 123, "bar": "baz" }
}`)

    var bar Bar

    err := json.Unmarshal(jsonStr, &bar)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", bar)
}

输出:

{Id:15 Foo:[123 32 34 102 111 111 34 58 32 49 50 51 44 32 34 98 97 114 34 58 32 34 98 97 122 34 32 125]}

通过利用 json.RawMessage,您可以现在成功将 JSON 解组为 Go 结构,该结构将 foo 对象视为字节数组。

以上是如何在 Go 中将 JSON 嵌套对象解组为字节数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn