我正在尝试将json API中的reddit内容拉入客户端的自定义结构中。我想出的结构是
type Subreddit struct {
offset int
num_of_posts int
subscribers: int
thumbnail string
children []post
}
type post struct {
type string
url string
thumbnail string
submitted_by string
upvotes int
downvotes int
}
不幸的是,reddit json的格式化甚至接近于此,此外我还想过滤掉我无法支持的网址。
我知道这样做的唯一方法是为源数据中的每个“子”创建一个接口,并手动遍历每个子项,为每个接口创建一个单独的“post”。并将它们推入subreddit对象的post数组中。
作为参考,数据格式为http://www.reddit.com/r/web_design/.json
这是正确的方法吗?或者有更快的方式。对于这么小的任务来说,这似乎是一个很大的开销,但我是一个PHP Javascript dev,所以我想这对我来说很不寻常。
答案 0 :(得分:4)
在我开始回答这个问题之前:
请注意,您的结构字段必须导出,才能与encoding/json
包一起使用。
其次,我必须承认我并不完全确定你对整个create an interface for each of the "children"
部分的意思。但它听起来很复杂;)
无论如何,回答你的问题:
如果您希望使用标准encoding/json
包来解组json,则必须使用中间结构,除非您使用与Reddit使用的结构类似的结构。
下面您可以找到Reddit结构的某些部分可能如何映射到Go结构的示例。通过将json解组为RedditRoot的实例,您可以轻松地遍历子项,删除任何不需要的子项,并填充您的Subreddit结构:
type RedditRoot struct {
Kind string `json:"kind"`
Data RedditData `json:"data"`
}
type RedditData struct {
Children []RedditDataChild `json:"children"`
}
type RedditDataChild struct {
Kind string `json:"kind"`
Data *Post `json:"data"`
}
type Post struct {
Type string `json:"-"` // Is this equal to data.children[].data.kind?
Url string `json:"url"`
Thumbnail string `json:"thumbnail"`
Submitted_by string `json:"author"`
Upvotes int `json:"ups"`
Downvotes int `json:"downs"`
}