如何在Golang中解析巨大的json

时间:2017-01-23 01:27:29

标签: json go twitter

我是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。

谢谢!

1 个答案:

答案 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循环中执行的操作,以呈现每个键值对。