我正试图解散这个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)
}
答案 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。