我正在尝试将“JSON”文件转换为R中的数据框,并且没有取得多大成功。
我尝试过使用RJSON和RJSONIO,但两者似乎都对我的数据格式有相同的反对意见,只返回第一组{}之间的值。以下是我的数据示例:
{"response time":"1075","_p":"99ae8e5f1eb64091c019e57ff0e686d3","_t":1397514301}
{"_n":"searcher","version":"v4","mobile":"No","_p":"1797370","_t":1397514315}
{"month":"April","_n":"shown availability","availability":"unavailable","_t":1397514320}
如果我在Notepad ++中打开它,这正是它的样子 - 你可以看到} {。
之间没有逗号。目的是将其转换为一个表格,每个{}为一行,每个类型都有一列,例如“_p”,“_ n”,“_ t”等我知道我可以使用plyr处理数据的锯齿状性质。
任何有关如何处理此问题的帮助都将受到赞赏。
答案 0 :(得分:2)
text <- '{"response time":"1075","_p":"99ae8e5f1eb64091c019e57ff0e686d3","_t":1397514301}
{"_n":"searcher","version":"v4","mobile":"No","_p":"1797370","_t":1397514315}
{"month":"April","_n":"shown availability","availability":"unavailable","_t":1397514320}'
library(rjson)
json.text <- readLines(textConnection(text))
# parse JSON into named list
json <- lapply(json.text,fromJSON)
library(plyr)
result <- do.call(rbind.fill,lapply(json,as.data.frame,optional=T))
result
# response time _p _t _n version mobile month availability
# 1 1075 99ae8e5f1eb64091c019e57ff0e686d3 1397514301 <NA> <NA> <NA> <NA> <NA>
# 2 <NA> 1797370 1397514315 searcher v4 No <NA> <NA>
# 3 <NA> <NA> 1397514320 shown availability <NA> <NA> April unavailable
注意:
,"trip "_t":1397514320}
无法解析。因此,如果这是您的实际文本文件,我不知道如何处理它。在此示例中,我删除了"trip
,将最后一个变量保留为"_t"
。optional=T
或as.data.frame(...)
将尝试&#34;更正&#34;列名称,特别是通过将X
添加到以_
开头的那些。编辑对评论主题的回复。
如果您的JSON有反斜杠字符,则可以在unexpected.escape=...
的调用中设置fromJSON(...)
参数,如下所示:
json <- lapply(json.text,fromJSON,unexpected.escape="keep")
但是请注意,您的文件必须是格式正确的JSON - 不要错过}
等等。否则fromJSON(...)
将失败。