Json 如何从golang地图检索数据
我将json数据放在Unmarsha1上。我如何检索像这样的数据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
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
可以使用likeb[“beat”]
,但是b[“beat”]
是接口类型的值,因此它可以使用likeb[“beat”][“name”]
,为此您可以添加这些行
var m map[string]interface{}
m = b["beat"].(map[string]interface{})
log.Println(m["name"])
它将b[“beat”]
的类型从界面转换为地图
更多信息:
符号从结构中获取值。如中的解组示例希望这能帮助你…好吧,
b
的类型是map[string]interface{}
所以b[“beat”]
的类型是interface{}
,这应该让我们清楚从现在开始该怎么做。如果没有:再看一遍围棋(你已经做了两次了?),特别是第14章及其后。