我将我的 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"]
不是 map ,所以你不能使用 b["beat"]["name"]
。
您使用 map[string]interface{}
声明了 b
,因此 b
可以像 b["beat"] 一样使用
,但是b["beat"]
是接口(interface)类型的值,所以可以像b["beat"]["name"]
一样使用,为此,您可以添加这些行。
var m map[string]interface{}
m = b["beat"].(map[string]interface{})
log.Println(m["name"])
它将 b["beat"]
的类型从接口(interface)转换为映射。
更多:
您可以为这个 json 字符串创建一个结构,然后您可以使用
.
符号从您的结构中获取值。就像 https://www.dotnetperls.com/json-go 中的 Unmarshal exsample有一个包 go-simplejson可以轻松获取json值。
希望对你有帮助...
关于json - 如何从 golang-map 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40277806/