解组 map[string]interface{} 时出现 mgo 错误
mgo error when unmarshal map[string]interface{}
我想在结构中存储任意 json 对象:
type C struct {
Name string `json:"name" bson:"name"`
Config map[string]interface{} `json:"config" bson:"config"`
}
当我存储任何深度嵌套的 json 对象时,这工作正常,但是当我检索它并且 mgo 尝试解组它时,我得到:
Unmarshal can't deal with struct values. Use a pointer.
我不确定指针应该是什么。如果我将其更改为:
,我会得到同样的错误
Config *map[string]interface{}
这里出现错误:https://github.com/MG-RAST/golib/blob/master/mgo/bson/bson.go#L493
虽然我不知道它在反映什么。
因此,当您解组时,输入参数采用指向结构的指针,并且您需要定义一个类型才能使用指向结构的指针。
type myMap map[string]interface{}
然后你可以创建一个指向该类型的指针,注意符号表示指向你的 myMap 类型的结构的指针,使用 json 你可以这样做:
json := []Byte{`{"name": "value"}`}
c := &myMap{"value": "name"}
json.Unmarshal(c, json)
因此您需要指向结构的 *myMap 而不是指向该类型的指针。为了解释这个问题的具体解决方案,您需要添加 mongodb 如何解组您的 json.
的上下文
我想在结构中存储任意 json 对象:
type C struct {
Name string `json:"name" bson:"name"`
Config map[string]interface{} `json:"config" bson:"config"`
}
当我存储任何深度嵌套的 json 对象时,这工作正常,但是当我检索它并且 mgo 尝试解组它时,我得到:
Unmarshal can't deal with struct values. Use a pointer.
我不确定指针应该是什么。如果我将其更改为:
,我会得到同样的错误Config *map[string]interface{}
这里出现错误:https://github.com/MG-RAST/golib/blob/master/mgo/bson/bson.go#L493
虽然我不知道它在反映什么。
因此,当您解组时,输入参数采用指向结构的指针,并且您需要定义一个类型才能使用指向结构的指针。
type myMap map[string]interface{}
然后你可以创建一个指向该类型的指针,注意符号表示指向你的 myMap 类型的结构的指针,使用 json 你可以这样做:
json := []Byte{`{"name": "value"}`}
c := &myMap{"value": "name"}
json.Unmarshal(c, json)
因此您需要指向结构的 *myMap 而不是指向该类型的指针。为了解释这个问题的具体解决方案,您需要添加 mongodb 如何解组您的 json.
的上下文