ネストされたオブジェクトが解析されずに、単に または として扱われるように、いくつかの json を非整列化しようとしてい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
ベストアンサー1
あなたが探しているのは生のメッセージパッケージに入力しますencoding/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]}