我正在处理 类型的数据map[string]interface{}。它可以在 (map[string]interface{}) 类型内拥有无限数量的嵌套对象。
编辑: 此数据来自 mongodb。我不能在这里真正应用 golang 的结构,因为属性因文档而异。我想要做的就是获取最深嵌套的对象,向其添加新属性并确保之后更新整个数据对象。
data["person"] = map[string]interface{}{
"peter": map[string]interface{}{
"scores": map[string]interface{}{
"calculus": 88,
"algebra": 99,
"golang": 89,
},
},
}
这些数据来自远程 API,我不知道里面的属性。我想添加的只是在最后一个对象(在本例中为“分数”)内添加新属性,并且可以说使用这个新属性(“物理”),数据将如下所示
data["person"] = map[string]interface{}{
"peter": map[string]interface{}{
"scores": map[string]interface{}{
"calculus": 88,
"algebra": 99,
"golang": 89,
"physics": 95,
},
},
}
我不确定如何将该属性添加到最后一个对象中。
我进行了递归类型检查,并且能够获取每个字段并打印其值。但是,由于映射不是引用性的,因此当我使用非复杂类型的值到达映射时,我无法向原始映射添加值。
package main
import "fmt"
func main() {
data := make(map[string]interface{})
data["person"] = map[string]interface{}{
"peter": map[string]interface{}{
"scores": map[string]interface{}{
"calculus": 88,
"algebra": 99,
"golang": 89,
},
},
}
parseMap(data)
}
func parseMap(aMap map[string]interface{}) interface{} {
var retVal interface{}
for _, val := range aMap {
switch val.(type) {
case map[string]interface{}:
retVal = parseMap(val.(map[string]interface{}))
//case []interface{}:
// retVal = parseArray(val.([]interface{}))
default:
//here i would have done aMap["physics"] = 95 if I could access the original map by reference, but that is not possible
retVal = aMap
}
}
return retVal
}
收到一只叮咚
繁星coding
相关分类