首页 > 解决方案 > 使用 FileInput Shiny App 上传 Json 文件

问题描述

我正在尝试构建一个闪亮的应用程序,它将 .json 文件读入表中以供查看。

我尝试使用 Json Lite 中的 DataTable 和 fromJson 函数读取数据并输出它

 options(shiny.maxRequestSize=30*1024^2) 

library(shiny)
library(jsonlite)
library(tidyverse)
library(DT)
library(rjson)



# Define UI for application that draws a histogram
ui <- fluidPage(
   # Application title
   titlePanel("Json Test"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
         fileInput("Json", "Choose Json File",
                   multiple = FALSE,
                   accept = c(".json"))
      ),

      # Show a plot of the generated distribution
      mainPanel(
         tableOutput("data")
      )
   )
)


server <- function(input, output, session) {

  fill <- reactive({
    df <- jsonlite::fromJSON(input$Json)
    Branch_10 <- df$branch_items$issue_items[[1]]
    return(Branch_10)
  })

   output$data <- renderDataTable({
    fill()
   })


}



# Run the application 
shinyApp(ui = ui, server = server)

该文件看起来正在被读取,但没有表格被格式化。如果您有将 .json 文件加载到 Shiny 中的经验,那么如果您能给我一些关于如何解决此问题的提示,那就太好了。

标签: rjsonshiny

解决方案


使用RJSONIOandrjson为我工作,使用write()and fromJSON()。要将文件上传到 shinyapp,您可以通过input$Json$datapath.

可重现的例子:

library(shiny)
library(RJSONIO)
library(rjson)
library(DT)
write(toJSON(mtcars), "test.json")

shinyApp(
  ui = fluidPage(
    fileInput("Json", "Choose Json File",
              multiple = FALSE,
              accept = c(".json")),
    DTOutput('tbl')
  ),
  server = function(input, output) {
    output$tbl = renderDT({
      req(input$Json)
      as.data.frame(fromJSON(file = input$Json$datapath))
    })
  }
)

推荐阅读