Json 如何从golang地图检索数据

Json 如何从golang地图检索数据,json,go,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":"localh

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

谢谢

您得到了错误原因
b[“beat”]
不是映射,因此您不能使用
b[“beat”][“name”]

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

var m map[string]interface{}
m = b["beat"].(map[string]interface{})
log.Println(m["name"])
它将
b[“beat”]
的类型从界面转换为地图

更多信息:

  • 您可以为这个json字符串创建一个结构,然后使用
    符号从结构中获取值。如中的解组示例

  • 有一个包可以轻松获取json值


  • 希望这能帮助你…

    好吧,
    b
    的类型是
    map[string]interface{}
    所以
    b[“beat”]
    的类型是
    interface{}
    ,这应该让我们清楚从现在开始该怎么做。如果没有:再看一遍围棋(你已经做了两次了?),特别是第14章及其后。