如何从R语言Tidyverse tibble生成指定格式的JSON字符串?
从Tibble生成指定结构JSON的通用方案
示例场景
假设我们有如下tibble数据:
library(tibble) sample_tbl <- tibble( category = c("A", "A", "B", "B"), item = c("item1", "item2", "item3", "item4"), value = c(10, 20, 30, 40) )
期望生成的JSON结构为:
{ "A": [ {"item": "item1", "value": 10}, {"item": "item2", "value": 20} ], "B": [ {"item": "item3", "value": 30}, {"item": "item4", "value": 40} ] }
通用解决方案
方法1:结合tidyr::nest与jsonlite
利用tidyverse的嵌套功能先按分组字段聚合数据,再转为命名列表生成JSON:
library(tidyverse) library(jsonlite) # 按分组字段嵌套剩余列,转为命名列表 nested_data <- sample_tbl %>% group_by(category) %>% nest() %>% mutate(data = map(data, as.list)) %>% deframe() # 生成格式化后的JSON output_json <- toJSON(nested_data, pretty = TRUE, auto_unbox = FALSE)
方法2:用purrr::split直接拆分数据框
更简洁的方式,拆分后直接处理生成列表:
library(tidyverse) library(jsonlite) # 按分组字段拆分数据框,移除分组列后转为列表结构 split_data <- sample_tbl %>% split(.$category) %>% map(~ select(., -category) %>% as.list()) # 生成JSON output_json <- toJSON(split_data, pretty = TRUE)
方案通用性说明
这两种方法都无需编写自定义函数,适配任意多变量场景:
- 只需调整
group_by(方法1)或split(方法2)的分组字段,剩余所有列都会自动嵌套到对应分组的数组中 - 新增或移除变量时,无需修改核心代码,仅需保证分组字段正确即可
内容的提问来源于stack exchange,提问作者bovender
相关产品推荐
相关产品推荐

