我正在尝试将多个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合并,但无济于事。
不太确定我要去哪儿这么严重的错误,将不胜感激。
答案 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()
。
希望有帮助!