如何将R语言Data Frame gscSocial转换为目标格式JSON?
问题梳理与优化方案
让我来帮你理清楚这个数据转JSON的问题~
先还原你的场景
首先你的gscSocial数据框是这样的:
gscSocial <- data.frame( Date = c("2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04"), totalReach = c(1069, 3075, 2674, 876) )
你执行了这段代码来转JSON:
gscSocialTotalReach <- gscSocial %>% as.tibble() %>% gather(key=Date, value=totalReach) %>% jsonlite::toJSON(auto_unbox = TRUE)
得到的结果是:
[{"Date":"2018-01-01","totalReach":1069},{"Date":"2018-01-02","totalReach":3075},{"Date":"2018-01-03","totalReach":2674},{"Date":"2018-01-04","totalReach":876}]
这里的小问题:多余的gather()
其实你的原始数据已经是长格式(每行对应一个日期的指标值),完全符合JSON数组对象的结构需求,gather()在这里是多余的——它本来是用来把宽格式转成长格式的,你现在的操作相当于做了一次无意义的数据变换,虽然结果是对的,但逻辑上没必要。
优化后的简洁代码
直接转换就行,不需要gather():
gscSocialTotalReach <- gscSocial %>% as.tibble() %>% jsonlite::toJSON(auto_unbox = TRUE)
运行后会得到和你现在一样的JSON结果,但代码更简洁易懂。
如果你想要其他格式的JSON?
比如如果你的需求是把日期作为键、总触达量作为值的嵌套结构(而不是数组),可以这样改:
gscSocialTotalReach <- gscSocial %>% tibble::deframe() %>% # 把两列转换成命名向量 jsonlite::toJSON(auto_unbox = TRUE)
输出结果会变成:
{"2018-01-01":1069,"2018-01-02":3075,"2018-01-03":2674,"2018-01-04":876}
内容的提问来源于stack exchange,提问作者road
相关产品推荐
相关产品推荐

