我正在尝试解组一些json,以便嵌套的对象不会被解析,而只是被视为a string或[]byte。
string
[]byte
所以我想得到以下内容:
{ "id" : 15, "foo" : { "foo": 123, "bar": "baz" } }
解组为:
type Bar struct { Id int64 `json:"id"` Foo []byte `json:"foo"` }
我收到以下错误:
json: cannot unmarshal object into Go value of type []uint8
游乐场演示
我认为您正在寻找的是包中的RawMessage类型encoding/json。
encoding/json
该文档指出:
输入RawMessage [] byte RawMessage是原始编码的JSON对象。它实现了Marshaler和Unmarshaler,可用于延迟JSON解码或预计算JSON编码。
输入RawMessage [] byte
RawMessage是原始编码的JSON对象。它实现了Marshaler和Unmarshaler,可用于延迟JSON解码或预计算JSON编码。
这是使用RawMessage的工作示例:
package main import ( "encoding/json" "fmt" ) var jsonStr = []byte(`{ "id" : 15, "foo" : { "foo": 123, "bar": "baz" } }`) type Bar struct { Id int64 `json:"id"` Foo json.RawMessage `json:"foo"` } func main() { 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]}
操场