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

您使用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"]的类型从界面转换为 map 。

有关更多:
  • 您可以为此json字符串创建一个结构,然后可以使用.符号从该结构中获取值。像https://www.dotnetperls.com/json-go
  • 中的Unmarshal示例
  • 有一个软件包go-simplejson可以轻松获取json值。

  • 希望这可以帮到你...

    09-25 15:56