2017-10-07 11 views
0

私は構造体に任意のJSONオブジェクトを保存する:のMgOエラーアンマーシャリングマップ[文字列]インターフェース{}

 
type C struct { 
    Name string `json:"name" bson:"name"` 
    Config map[string]interface{} `json:"config" bson:"config"` 
} 

私は深くネストされたJSONオブジェクトを保存するとき、これは正常に動作しますが、私は取得しに行くときそれとmgoは非マーシャルしようとします。

Unmarshalは構造体値を扱うことができません。ポインタを使用します。

ポインタとは何かが分からない。私は

Config *map[string]interface{}

にそれを変更すると、同じエラーが発生します。

エラーが発生し、ここで:https://github.com/MG-RAST/golib/blob/master/mgo/bson/bson.go#L493

私はそれはしかしに反射だか分かりません。

+0

データを保存および取得する方法をコードに示します。 [mcve]を目指してください。 – icza

答えて

0

アンマーシャリングするときは、入力引数は構造体へのポインタをとり、構造体へのポインタを使用するには型を定義する必要があります。

type myMap map[string]interface{} 

は、その後、あなたがJSONであなたがそうのような何かを行うことができ、そのタイプ通知タイプMYMAPのためのあなたの構造体へのポインタを示すために、アンパサンドへのポインタを行うことができます。

json := []Byte{`{"name": "value"}`} 
c := &myMap{"value": "name"} 
json.Unmarshal(c, json) 

だからあなたが必要* MYMAP型へのポインタではなく構造体に渡します。この問題に対する具体的な解決方法を説明するには、mongodbがjsonを非整列化する方法のコンテキストを追加する必要があります。

+0

愚かなエラー、私はOne()に構造体を渡していた - https://godoc.org/labix.org/v2/mgo#Query.One - それへのポインタではない。 – Kareem

関連する問題