Golang unmarshal json以数组开头

时间:2015-12-05 09:08:57

标签: json go decode

我正试图解散这个json https://www.reddit.com/r/videos/comments/3vgdsb/recruitment_2016.json

它以两个不同对象的数组开始,我只需要第二个对象的数据。

我想检索注释主体,当我尝试解码它时它不会给我任何错误,但它不会捕获我想要的数据。

这是我从运行中获得的输出:

//Response struct when initialized: []
//Response struct decoded: [{{{[]}}} {{{[]}}}]

////

type Response []struct {
    Parent struct {
        Data struct {
            Children []struct {
                Com Comment
            }
        }
    }
}

type Comment struct {
    Name string `json:"body"`
}

func init() {
    http.HandleFunc("/api/getcomments", getComments)
}

func getComments(w http.ResponseWriter, r *http.Request) {

    url := "https://www.reddit.com/r/videos/comments/3vgdsb/recruitment_2016.json"
    c := appengine.NewContext(r)
    client := urlfetch.Client(c)
    resp, err := client.Get(url)
    if err != nil { fmt.Fprint(w, "Error client.Get(): ", err) }

    re := new(Response)
    fmt.Fprint(w, "Response struct: ", re, "\n")

    errTwo := json.NewDecoder(resp.Body).Decode(&re)
    if errTwo != nil {  fmt.Fprint(w, "Error decoding: ", errTwo, "\n") }

    fmt.Fprint(w, "Response struct: ", re)
}

2 个答案:

答案 0 :(得分:4)

对于那些努力为JSON解组创建正确结构的人来说,这是一个很酷的网站,可以将任何JSON转换为正确的Go结构:JSON-to-Go

答案 1 :(得分:3)

您正在解组的json数据与您的数据不一致,如果字段的名称与您的结构中的名称不同,您也应该使用struct标记。应该更像这样:

type Response []struct {
        Kind string `json:"kind"`
        Data struct {
            Children []struct {
                Data struct {
                    Replies []struct {
                       // whatever...
                    } `json:"replies"`
                } `json:"data"`
            } `json:"children"`
        } `json:"data"`
    }
}

当然我会使用真实的命名类型替换内联类型,但我只是在这里就数据层次结构提出一个观点。

该死的,那是一些丑陋的JSON BTW。