You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:32:22