代码之家  ›  专栏  ›  技术社区  ›  Miljan Rakita

golang使用类型映射[字符串]接口{}为对象设置新值

  •  2
  • Miljan Rakita  · 技术社区  · 7 年前

    我得到了json str,我像这样解析它。

    var bdoc interface{}
    bson.UnmarshalJSON([]byte(gjson.Get(*str, "user").String()), &bdoc)
    

    我的bdoc类型为map[字符串]接口{}。当我想从地图中获取钥匙时,我会这样做:

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

    但是,如何为“pk”键设置新值?我想转换一下 bdoc[“pk”]=“1234567”。新值将不是interface类型,而是string类型。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Adrian    7 年前

    可以将字符串和值保持设置为字符串类型

    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"])
    
    }