如何在不创建临时文件的情况下将jsonlite stream_in函数与自定义处理程序一起使用

时间:2017-11-06 19:57:08

标签: r jsonlite

我见过的最常见的例子是将stream_in与自定义处理程序一起使用stream_out将已处理的json写入文件连接。我不清楚如何编写一个自定义处理程序来存储使用我的自定义处理程序逻辑处理的所有页面,并将它们绑定到一个要返回的数据框中,就像默认处理程序那样。

以下示例返回NULL:

library(jsonlite)

handler <- function(df){
  # process df and store in result
  ...
  return(result)
}
x <- stream_in(file_connection, simplifyVector = FALSE, handler = handler)
# x is NULL

有没有办法绑定多个处理程序调用的结果而不将中间结果写入磁盘?

1 个答案:

答案 0 :(得分:1)

这里的第一个答案:https://stackoverflow.com/a/46646268/8440355

示例:

    new_df <- new.env()
    stream_in(file("file_name.json"), handler = function(df){ 
    new_df <- rbind.data.frame(new_df,dplyr::filter(df$col_name_1<20))}, 
    pagesize = 5000)

这需要将您的json轻松写入数据帧(在进行rbind时,很多嵌套可能会引发错误,但我希望您能获得“ new.env”逻辑来规避创建临时文件)