2017-10-07 27 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{} 

然後你就可以做出一個指針類型通知符號來表示指針的結構類型MYMAP,使用JSON可以做些像這樣:

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

所以你需要* MYMAP該結構不是指向該類型的指針。爲了解釋這個問題的具體解決方案,你需要添加mongodb如何解析你的json的上下文。

+0

是的,愚蠢的錯誤,我傳遞結構到一() - https://godoc.org/labix.org/v2/mgo#Query.One - 而不是一個指針。 – Kareem