我将我的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"])
谢谢
答案 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"]
的类型从接口转换为地图。
更多信息:
您可以为此json字符串创建结构,然后您可以使用.
符号从结构中获取值。比如https://www.dotnetperls.com/json-go
有一个包go-simplejson可以轻松获得json值。
希望这可以帮助你...