使用Golang将新值设置到类型为map[string]interface{}的对象中

4
我得到了一个 JSON 字符串,我通过以下方式进行解析。
var bdoc interface{}
bson.UnmarshalJSON([]byte(gjson.Get(*str, "user").String()), &bdoc)

我的bdoc的类型是map[string]interface{}。当我想从这个映射中获取键时,我会像这样操作:

bdoc.(map[string]interface{})["pk"]

但是如何为“pk”键设置新值呢?我想转换bdoc [“pk”] = “1234567”。新值将不是接口类型,而是字符串类型。


你可以将任何类型分配给 interface{}。问题到底是什么? - JimB
这可能对你有用:github.com/icza/dyno(声明:我是作者)。 - icza
1个回答

2
您可以将字符串和值设置为字符串类型。
package main

import (
    "fmt"
    "log"
)

func main() {

    var bdoc interface{}
    aMap, ok := bdoc.(map[string]interface{})
    if !ok {
       log.Fatalf("Failed to cast %T", bdoc)
    }
    //depending on JSON settting pk number may have json.Numbe or float64
    fmt.Prinf("%v  %T\n", aMap["pk"], aMap["pk"])
   aMap["pk"] ="1234"
    fmt.Prinf("%v  %T\n", aMap["pk"], aMap["pk"])

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接