【问题标题】:Import JSON data with multiple lines and convert to data frame in R导入多行 JSON 数据并转换为 R 中的数据框
【发布时间】:2013-07-29 16:39:24
【问题描述】:

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

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

【问题讨论】:

    标签: regex json r rjsonio rjson


    【解决方案1】:

    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 解析器忽略。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 2016-05-09
        • 2019-05-16
        • 2016-05-31
        • 2018-03-05
        相关资源
        最近更新 更多