json - 如何从 golang-map 中检索数据

标签 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"])

谢谢

最佳答案

你得到错误,因为 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)转换为映射。

更多:

  1. 您可以为这个 json 字符串创建一个结构,然后您可以使用 . 符号从您的结构中获取值。就像 https://www.dotnetperls.com/json-go 中的 Unmarshal exsample

  2. 有一个包 go-simplejson可以轻松获取json值。

希望对你有帮助...

关于json - 如何从 golang-map 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40277806/

相关文章:

go - 为什么不能在赋值中使用 (type func(string)) 作为 type func(interface{})

function - Go 的 struct 方法在调用中抛出太多参数

json - 如何在 golang 中解析 JSON?

python - 动态拉取 JSON

json - 如何从 powershell 中的数组中删除对象?

go - Go 语言中的副作用

java - 如果 JSON 数组为空,则更改文本

javascript - 强制现有客户端网页重新加载 - 仅使用 JSON(无评估)

unit-testing - go test 是否同时运行单元测试?

google-app-engine - 是否可以在 Google appengine 标准环境中使用 Gorilla mux 路由器?