解组 JSON 数据时,通常希望将嵌套对象视为不透明值,而不是将它们解析为 Go 类型。这可以使用encoding/json包提供的RawMessage类型来实现。
考虑以下JSON和Go结构:
{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }
type Bar struct { Id int64 Foo []byte }
尝试将此 JSON 解组到 Bar 结构中会产生以下结果错误:
json: cannot unmarshal object into Go value of type []uint8
要将嵌套对象保留为字符串或字节切片,请使用 RawMessage 类型:
type Bar struct { Id int64 Foo json.RawMessage }
如文档中所述, RawMessage 是一个原始编码的 JSON 对象,它实现了 Marshaler 和 Unmarshaler
这是一个工作示例:
package main import ( "encoding/json" "fmt" ) var jsonStr = []byte(`{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }`) type Bar struct { Id int64 Foo json.RawMessage } func main() { var bar Bar if err := json.Unmarshal(jsonStr, &bar); err != nil { panic(err) } fmt.Printf("%+v", 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]}
[游乐场链接](https://play.golang.org/p/L2yJj2e72dS)
以上是如何在 Go 中将嵌套 JSON 对象作为字符串或字节处理?的详细内容。更多信息请关注PHP中文网其他相关文章!