如何从golang-map中检索数据

时间:2016-10-27 06:39:16

标签: json go

我将我的json数据放在Unmarsha1上。我如何检索

之类的数据
  log.Print(b["beat"]["name"])

但我怎样才能检索数据      log.Print(b [“beat”] [“name”]) - >无法获取数据

我的代码如下:

var b map[string]interface{}

data := []byte(`
    {"foo":1,"beat":{"@timestamp":"2016-10-27T12:02:00.352Z","name":"localhost.localdomain","version":"6.0.0-alpha1"}}
`)

err := json.Unmarshal(data, &b)

if err != nil{
    fmt.Println("error: ", err)
}
log.Print(b)
log.Print(b["beat"]["name"])

谢谢

1 个答案:

答案 0 :(得分:1)

您收到错误原因b["beat"]不是地图,因此您无法使用b["beat"]["name"]

您使用b声明map[string]interface{},因此b可以使用b["beat"],但b["beat"]是接口类型的值,因此可以使用b["beat"]["name"],为此您可以添加这些行。

var m map[string]interface{}
m = b["beat"].(map[string]interface{})
log.Println(m["name"])

它将b["beat"]的类型从接口转换为地图。

更多信息:

  1. 您可以为此json字符串创建结构,然后您可以使用.符号从结构中获取值。比如https://www.dotnetperls.com/json-go

  2. 中的Unmarshal exsample
  3. 有一个包go-simplejson可以轻松获得json值。

  4. 希望这可以帮助你...