r - 如何以特定格式将数据框导出为 json
问题描述
我想在 Shiny App 中使用 downloadButton 下载数据框并将其导出到 json 文件。使用以下代码,它在浏览器中运行良好:
library(shiny)
library(jsonlite)
ui <- basicPage(
downloadButton("downloadData", "Download Data")
)
server <- function(input, output) {
data <- reactive({
df <- data.frame(name = c("Jon", "Bill", "Maria"),
age = c(23, 41, 32))
})
output$downloadData <- downloadHandler(
filename = function() {
"data.json"
},
content = function(file) {
write_json(data(), file)
}
)
}
shinyApp(ui, server)
但是,json文件的内容有以下格式:
[{"name":"Jon","age":23},{"name":"Bill","age":41},{"name":"Maria","age":32}]
如何获得以下格式?
{"name": ["Jon", "Bill", "Maria"], "age": [23, 41, 32]}
我阅读了write_json的文档,但显然可能性是有限的。因此,在 Shiny 上下文中工作的其他 json 导出函数也会有所帮助。
解决方案
将 data.frame 视为列表:
write_json( as.list(data()), file )
一个简单的演示:
df <- data.frame(
name = c("Jon", "Bill", "Maria"),
age = c(23, 41, 32)
)
toJSON( as.list( df ) )
产生:
{"name":["Jon","Bill","Maria"],"age":[23,41,32]}
作为记录,(也许你已经知道了),data.frames 是形状和形式的列表,只有 row.names 和一个类:
> dput( df )
structure(list(name = c("Jon", "Bill", "Maria"), age = c(23,
41, 32)), class = "data.frame", row.names = c(NA, -3L))
> dput( as.list(df) )
list(name = c("Jon", "Bill", "Maria"), age = c(23, 41, 32))
推荐阅读
- sql-server - ADOQuery.Locate 慢,创建索引
- c# - .net 核心 AddHttpClient 与反射
- c# - 将 JSON 结果转换为对象类型
- java - 尝试使用另一个类中的方法时,线程“main”java.lang.NullPointerException 中的异常?
- azure-devops - Azure DevOps 托管代理是 docker 容器吗?
- docker - Next.js 生产 - dockerized build 找不到环境变量集
- github - 如何将 repo 及其 Pull Requests 从 bitbuket 导入到 github
- python - 如何在不使用 for 循环的情况下有条件地从我的数据框中删除列?
- javascript - 在JS中的文件中获取“:”之后的所有值
- jenkins - 使用代理 docker 时,如何在同一节点上运行 jenkins 作业的所有阶段?