我有一个json格式数据,我需要在R中提取该数据,但我希望json中的列(字段)作为数据框中的字段和字段下面的相应数据。
一些json数组:
[{"from": {"category": "k", "name": "p", "id": "12"}, "like_count": 0, "can_remove": false, "created_time": "2015-11-20T04:19:27+0000", "message": "Hello Aleks, we are sorry to read about your experience, please contact us via private message so we can better assist you.", "id": "10153685805887457_10153685807007457", "user_likes": false}, {"from": {"name": "Aleks Vujovic", "id": "524130559029"}, "like_count": 0, "can_remove": false, "created_time": "2015-11-20T04:23:31+0000", "message": "I would love to but noare available.", "id": "10153685805887457_10153685812162457", "user_likes": false}]
答案 0 :(得分:0)
我不确定我是否理解你的问题(一些澄清会很好),但也许这就是你问题的解决方案。此代码将JSON转换为数据框。
library(rjson)
library(plyr)
json = '[{"name":"John","age":20},
{"name":"Martin","age":30}]'
data = fromJSON(json)
frame = do.call("rbind.fill", lapply(data, as.data.frame))
根据评论中的问题澄清:
首先,保留CSV文件中的引号以正确读取JSON非常重要。在这里,我替换默认设置来同时处理'和"作为字符串分隔符:
c = read.csv2("C:\\Users\\Ardavel\\Desktop\\f.csv", header = T, quote="\'")
然后我获得了包含JSON数据的列:
d = c$series.data
然后我自己提取数据:
x = levels(d)[d]
最后,我可以使用与原始答案中相同的方法:
data = fromJSON(x[1])
frame = do.call("rbind.fill", lapply(data, as.data.frame))
如果您有多个行,我可以将您的CSV中的所有行的结果留给您。