在R中读取3000个JSON文件创建数据集时遇行不匹配错误求助
R批量读取JSON文件合并报错的解决思路
问题根源
报错提示the arguments imply different numbers of rows : 1, 0,说明你读取的3000个JSON文件中,存在空文件(读取后返回0行数据)或者部分文件的结构与其他文件不一致,导致合并时行数不匹配。
具体解决步骤
第一步:定位异常文件
先遍历所有文件,打印每个文件读取后的行数,找出空文件或结构异常的文件:library(rjson) # 替换成你的JSON文件所在文件夹路径 file_paths <- list.files(path = "your/json/folder/path", pattern = "\\.json$", full.names = TRUE) for (i in 1:length(file_paths)) { data <- fromJSON(file = file_paths[i]) cat("文件:", file_paths[i], " 读取后行数:", length(data), "\n") }第二步:过滤空文件并合并
在读取过程中跳过空文件,只保留有效数据进行合并,推荐用dplyr::bind_rows,它能兼容字段不一致的情况(自动填充NA):library(rjson) library(dplyr) file_paths <- list.files(path = "your/json/folder/path", pattern = "\\.json$", full.names = TRUE) all_valid_data <- list() for (path in file_paths) { json_content <- fromJSON(file = path) # 仅保留非空数据 if (length(json_content) > 0) { df <- as.data.frame(json_content) all_valid_data[[length(all_valid_data) + 1]] <- df } } # 合并所有有效数据框 final_dataset <- bind_rows(all_valid_data)第三步:改用更强大的JSON处理包
rjson对复杂嵌套JSON的支持有限,推荐换成jsonlite,它能自动扁平化嵌套结构,更好处理字段不一致的文件:library(jsonlite) library(dplyr) file_paths <- list.files(path = "your/json/folder/path", pattern = "\\.json$", full.names = TRUE) all_valid_data <- list() for (path in file_paths) { # flatten = TRUE 自动扁平化嵌套JSON df <- fromJSON(path, flatten = TRUE) # 跳过空数据框 if (nrow(df) > 0) { all_valid_data[[length(all_valid_data) + 1]] <- df } } final_dataset <- bind_rows(all_valid_data)进阶:用purrr简化代码
用purrr的map_dfr替代循环,代码更简洁,同时自动处理空数据:library(jsonlite) library(purrr) library(dplyr) file_paths <- list.files(path = "your/json/folder/path", pattern = "\\.json$", full.names = TRUE) final_dataset <- map_dfr(file_paths, function(path) { df <- fromJSON(path, flatten = TRUE) # 空数据框返回NULL,不会被加入合并 if (nrow(df) == 0) NULL else df })
内容的提问来源于stack exchange,提问作者CodeCraft
相关产品推荐
相关产品推荐

