假设我有以下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不允许“允许”多行字符串。我试图以各种方式解决这个问题:
使用正则表达式尝试了上述所有内容。
我的问题是:如何操作JSON数据,以便将数据的所有“行”读入R中,以便我可以将它们取消列表并使用等于“title”的列构造相应的数据框, 'text','url'和行等于JSON数据中的'lines'?
我使用RJSON&amp; amp; R中的RJSONIO库,但我对我目前使用哪一个库感到矛盾,因为我最终认为问题在于JSON数据本身的格式化
答案 0 :(得分:2)
JSON字符串本身确实不太正确。
\
,因此未正确屏蔽一个引号:"autores" : ",\"string\",\"string\",\"string\",\"string",5"
应为"autores" : ",\"string\",\"string\",\"string\",\"string\",5"
{}
个对象(第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解析器忽略。
答案 1 :(得分:0)
这里我已经将JSON字符串解析为数据框。我认为这对你有用。
http://spring-webservice-2-step-by-step.blogspot.in/2013/10/voltdb-with-r-real-time-analysis.html