如何批量读取指定路径下多JSON文件并导入R转为dataframe
批量读取多JSON文件合并为R dataframe的实现方法
1. 安装加载所需依赖包
我们主要用到jsonlite处理JSON数据,purrr做批量迭代,dplyr做数据合并:
# 未安装包先执行安装,已安装可跳过该行 install.packages(c("jsonlite", "purrr", "dplyr")) # 加载依赖包 library(jsonlite) library(purrr) library(dplyr)
2. 提取目标路径下所有JSON文件路径
# 替换为你的JSON文件存放路径 target_dir <- "D:/a/b/c" # 匹配路径下所有后缀为.json的文件,full.names设为TRUE返回完整路径 # recursive设为TRUE会同时读取子文件夹内的JSON,不需要可改为FALSE json_file_list <- list.files( path = target_dir, pattern = "\\.json$", full.names = TRUE, recursive = FALSE )
3. 批量读取并合并为统一dataframe
根据你的JSON文件存储格式选择对应读取方法:
- 若为标准单JSON对象/JSON数组格式的文件,使用
fromJSON读取:full_df <- map_dfr(json_file_list, function(file) { # flatten设为TRUE会自动扁平化JSON嵌套结构,避免生成嵌套列 fromJSON(file, flatten = TRUE) }) - 若为每行存储一个JSON对象的多行JSON(ndjson)格式,也就是你提到的「每个文件包含多行数据」的常见场景,使用
stream_in读取:full_df <- map_dfr(json_file_list, function(file) { stream_in(file(file), flatten = TRUE) })
可选:兼容异常文件的读取方案
如果存在个别JSON文件格式损坏的情况,可以用以下写法跳过错误文件,避免读取中断:
# 定义安全读取函数,读取失败时返回NULL跳过该文件 safe_json_read <- possibly( .f = function(file) stream_in(file(file), flatten = TRUE), # 这里可以替换为你需要的fromJSON写法 otherwise = NULL ) # 批量读取合并 full_df <- map_dfr(json_file_list, safe_json_read)
读取完成后,full_df就是所有1307个JSON文件合并后的标准dataframe,可直接用于后续数据处理。
内容的提问来源于stack exchange,提问作者Mohd Syazwan
相关产品推荐
相关产品推荐

