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

如何在R Shiny中上传含多文件夹的目录并读取所有JSON文件

R Shiny 实现目录选择与递归读取所有JSON文件

完整可运行代码

library(shiny)
library(jsonlite)

ui <- fluidPage(
  titlePanel("批量读取目录下所有JSON文件"),
  sidebarLayout(
    sidebarPanel(
      shinyDirButton("dir", "选择目标目录", "请选择包含子文件夹的目录"),
      actionButton("load_btn", "开始读取JSON文件")
    ),
    mainPanel(
      verbatimTextOutput("file_count"),
      verbatimTextOutput("sample_content")
    )
  )
)

server <- function(input, output, session) {
  # 存储选择的目录路径
  selected_dir <- reactiveVal(NULL)
  
  # 处理目录选择事件
  shinyDirChoose(input, "dir", roots = c(home = normalizePath("~")), session = session)
  
  observeEvent(input$dir, {
    if (!is.null(input$dir)) {
      # 解析选择的目录路径
      dir_path <- parseDirPath(c(home = normalizePath("~")), input$dir)
      selected_dir(dir_path)
    }
  })
  
  # 处理读取按钮点击事件
  json_data_list <- eventReactive(input$load_btn, {
    req(selected_dir())
    
    # 递归查找所有JSON文件
    json_files <- list.files(path = selected_dir(), pattern = "\\.json$", recursive = TRUE, full.names = TRUE)
    
    if (length(json_files) == 0) {
      return(NULL)
    }
    
    # 读取所有JSON文件到列表
    lapply(json_files, function(file) {
      fromJSON(file)
    })
  })
  
  # 输出找到的文件数量
  output$file_count <- renderPrint({
    req(json_data_list())
    cat(sprintf("共找到并读取 %d 个JSON文件\n", length(json_data_list())))
  })
  
  # 输出第一个文件的内容预览
  output$sample_content <- renderPrint({
    req(json_data_list())
    if (length(json_data_list()) > 0) {
      cat("第一个JSON文件内容预览:\n")
      str(json_data_list()[[1]])
    }
  })
}

shinyApp(ui, server)

关键说明

  • 目录路径解析:shinyDirChoose返回的是结构化路径,必须用parseDirPath转换为系统可识别的绝对路径,这是很多人遇到空界面或路径错误的核心原因。
  • 递归查找文件:list.files设置recursive=TRUE可以遍历所有子文件夹,pattern="\\.json$"确保只匹配JSON文件,full.names=TRUE返回完整文件路径方便读取。
  • 触发逻辑:用actionButton触发读取操作,避免目录选择后立即读取(可能用户还没选好),同时用req()确保依赖项存在后再执行逻辑,防止报错。
  • 空界面问题排查:如果之前出现空界面,大概率是没有正确渲染输出内容(比如没加verbatimTextOutput这类输出组件),或者路径解析错误导致没有找到文件。

内容的提问来源于stack exchange,提问作者ksinva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:52:38