2013-07-29 33 views
1

假设我有以下JSON数据:多行导入JSON数据,并转换为数据帧中的R

{ "_id" : { "$oid" : "string" }, "titulo" : "string", "id_cv" : 1132, "textos" : [ { "fecha" : { "$date" : 1217376000000 }, "estado" : "string", "texto" : "string", "source_url" : "string" } ] } 
{ "_id" : { "$oid" : "string" }, "titulo" : "string", "autores" : ",\"string\",\"string\",\"string\",\"string",5", "id_cv" : 1138, "textos" : [ { "fecha" : { "$date" : 1217548800000 }, "estado" : "string", "texto" : "string", "source_url" : "string" } ] } 

我试图导入至R JSON数据和在变换它至最终的R数据框架。

假设我有R中的下面的脚本:

library("rjson") 
json_file <- "/Users/usr/file/json_data.json" 
json_data <- fromJSON(paste(readLines(json_file), collapse="")) 

data = unlist(json_data) 

title=data[names(data)=="titulo"] 
print(title) 

text=data[names(data)=="textos.texto"] 
print(text) 

url=data[names(data)=="textos.source_url"] 
print(url) 

当运行该脚本JSON数据仅产生含有JSON数据文件的第一行的数据帧。我有大约200行。我知道的一个问题是JavaScript不允许多行字符串。我试图用这个来应对不同的方式:

  1. 添加到数据的每个‘行’结束““”数据的每个‘行’之间
  2. 添加。“””。
  3. 在每行数据之间添加“\”。
  4. 将“\”添加到每个“行”数据的末尾。
  5. 转换所有多行中的一行(替换“\ n”个用“\ n”个)

所有上述的使用正则表达式已经尝试。

我的问题是:我如何操作JSON数据,以便所有'行'的数据都被读入到R中,以便我可以将它们取消列表并构造相应的数据框,标题','文本','网址'和行等于JSON数据中的'行'?

我试图这样同时使用R中的RJSON & RJSONIO库,但我很矛盾的关于我当时正在使用哪一个,因为我相信最终的问题是使用JSON数据本身

的格式

回答

2

JSON字符串本身确实不太正确。

  1. 有没有在字符串中的一个缺失的\,所以一个quotationmark没有正确屏蔽:"autores" : ",\"string\",\"string\",\"string\",\"string",5"应该"autores" : ",\"string\",\"string\",\"string\",\"string\",5"
  2. 个人{}对象(1号线和2,当你打电话给他们)必须结合在上面的结构中,可以是数组([]),也可以是带有标识符的对象({}),否则它没有明确定义,JSON结构将如何解释。

我修改了JSON字符串由两个阵列元件,每一个都含有一个管线(=一个JSON对象):

[{ "_id" : { "$oid" : "string" }, 
    "titulo" : "string", 
    "id_cv" : 1132, 
    "textos" : [ { "fecha" : { "$date" : 1217376000000 }, 
           "estado" : "string", 
           "texto" : "string", 
          "source_url" : "string" } ] }, 

{ "_id" : { "$oid" : "string" }, 
    "titulo" : "string", 
    "autores" : ",\"string\",\"string\",\"string\",\"string\",5", 
    "id_cv" : 1138, 
    "textos" : [ { "fecha" : { "$date" : 1217548800000 }, 
           "estado" : "string", 
           "texto" : "string", 
          "source_url" : "string" } ] }] 

我添加新行更好的可读性。换行符和空格(单个标识符或字符串之外)是 - 或更好的:应该被JSON解析器忽略。