1

假设我有以下 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 数据导入 R 并将其转换为最终的 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,以便我可以取消列出它们并构造相应的数据框,其列等于“标题”、“文本” ,'url' 和行等于 JSON 数据中的 'lines'?

我已经尝试使用 R 中的 RJSON 和 RJSONIO 库进行此操作,但我对目前使用哪个库感到矛盾,因为我认为最终问题在于 JSON 数据本身的格式

4

2 回答 2

2

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

  1. 其中一个字符串中缺少\一个,因此一个引号没有被正确屏蔽:"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 解析器忽略。

于 2013-07-29T16:53:50.417 回答
0

在这里,我将 JSON 字符串解析为数据框。我认为这对你有用。

http://spring-webservice-2-step-by-step.blogspot.in/2013/10/voltdb-with-r-real-time-analysis.html

于 2013-10-12T10:53:50.237 回答