我是Golang的新手,我正在尝试解析大型json,就像你从拥有大量数据的API那样。 documentation解释了如何使用任何json执行此操作:
b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)
var f interface{}
err := json.Unmarshal(b, &f)
m := f.(map[string]interface{})
这很好用,但是当我使用我从Twitter API获得的json时,就像Twitter dev site上引用末尾的json一样,我收到此错误:
接口转换:interface {}是[] interface {},而不是map [string] interface {}
我知道有类似的问题,但我找不到答案。有人可以推荐我更好的解决方法吗?
我的版本是go1.6.2 linux / amd64。
谢谢!
答案 0 :(得分:3)
在这种情况下,您不是解组单个JSON对象,而是解释JSON对象的数组,这就是您解析API响应时遇到问题的原因。您看到的错误告诉您f
的实际类型。另一个例子起作用了,因为它是一个JSON对象,可以映射为map[string]interface{}
看看这个:
var f []interface{}
err := json.Unmarshal(str, &f)
if err != nil {
fmt.Println(err)
return
}
for _, v := range f {
z := v.(map[string]interface{})
for k2, v2 := range z {
fmt.Println("Key:", k2, "Value:", v2)
}
}
f
应该是[]interface{}
类型的接口。根据您计划解析API响应的方式,您可以执行类似我在for循环中执行的操作,以呈现每个键值对。