将多个JSON文件提取到一个数据框中

时间:2019-01-03 04:35:43

标签: r json

我正在尝试将多个json文件合并到一个数据库中,尽管尝试了SO上的所有方法,但失败了。

文件提供传感器数据。我已经完成的阶段是:

1. Unzip the files - produces json files saved as '.txt' files
2. Remove the old zip files
3. Parse the '.txt' files to remove some bugs in the content - random 3 
letter + comma combos at the start of some lines, e.g. 'prm,{...'

我有将其分别转换为数据帧的代码:

stream <- stream_in(file("1.txt"))
flat <- flatten(stream)
df_it <- as.data.frame(flat)

但是当我将其放入函数中时:

df_loop <- function(x) {
  stream <- stream_in(x)
  flat <- flatten(stream)
  df_it <- as.data.frame(flat)
  df_it
}

然后尝试运行它:

df_all <- sapply(file.list, df_loop)

我得到:

Error: Argument 'con' must be a connection.

然后,我尝试将json文件与rbind.fill合并,但无济于事。

不太确定我要去哪儿这么严重的错误,将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要对功能进行一些小的更改。更改为-

stream <- stream_in(file(x))

说明

首先分析您的原始实现-

stream <- stream_in(file("1.txt"))

此处的1.txt是作为输入参数传递给file()函数的文件路径。快速的?file会告诉您它是

  

创建,打开和关闭连接的功能,即“通用”   文件”,例如可能已压缩的文件,URL,管道等。

现在,如果您执行?stream_in(),将会发现它是

  

函数可实现对JSON数据的逐行处理   连接,例如套接字,URL,文件或管道

关键字为socket, url, file or pipe

您的file.list只是文件路径,特定字符/字符串的列表。但是,为了使stream_in()工作,您需要传入file对象,该对象是file()函数的输出,该函数将文件路径作为字符串输入。

将它们捆绑在一起,您需要做stream_in(file("/path/to/file.txt"))

这样做之后,您的sapply将遍历每个路径,创建文件对象,并将其作为输入传递给stream_in()

希望有帮助!