【问题标题】:golang set new value to object with type map[string]interface{}golang 为 map[string]interface{} 类型的对象设置新值
【发布时间】:2018-10-08 17:13:42
【问题描述】:

我得到了我这样解析的 json str。

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{}。究竟是什么问题?
  • 这可能对你很方便:github.com/icza/dyno(披露:我是作者)。

标签: go interface


【解决方案1】:

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

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

}

【讨论】:

  • 好一个!非常感谢,这正是我需要的。
猜你喜欢
  • 2017-07-13
  • 2015-05-02
  • 2015-01-14
  • 2016-02-27
  • 2021-01-02
  • 2017-01-16
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多