我试图解散一些json,以便一个嵌套的对象不被解析,只是被当作一个字符串或[]字节.
所以我想得到以下内容:
{ "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
解决方法
我想你正在寻找的是编码/ json包中的
RawMessage类型.
文件规定:
@H_403_22@type RawMessage []byte
RawMessage is a raw encoded JSON object. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding.
以下是使用RawMessage的一个工作示例:
package main import ( "encoding/json" "fmt" ) var jsonStr = []byte(`{ "id" : 15,"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) }
输出:
@H_403_22@{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]}