如何用jsonlite或其他R包将数据转为指定结构的JSON?
将R数据框转换为指定结构的JSON
原始数据框
fb <- structure(list(full = c("f1", "f2"), semiabrv = c("s1", "s2"), abrv = c("a1", "a2")), row.names = 1:2, class = "data.frame")
默认转换的问题
使用jsonlite::toJSON(pretty=TRUE)会生成数组型JSON,但我们需要以full列值为键、对应semiabrv和abrv为数组值的对象结构。
解决方案
核心思路是先将数据框转换为命名列表,再用jsonlite转换为目标JSON:
方法1:Base R + jsonlite
# 构造以full列为名称的列表,每个元素是对应semiabrv和abrv的向量 result_list <- setNames( lapply(1:nrow(fb), function(i) c(fb$semiabrv[i], fb$abrv[i])), fb$full ) # 转换为目标JSON结构 jsonlite::toJSON(result_list, pretty = TRUE)
方法2:purrr + jsonlite(tidyverse风格)
library(purrr) # 按full列拆分数据框,提取对应列组成向量 result_list <- fb %>% split(.$full) %>% map(~ c(.$semiabrv, .$abrv)) # 生成JSON jsonlite::toJSON(result_list, pretty = TRUE)
输出结果
执行后会得到你期望的JSON结构:
{ "f1": ["s1", "a1"], "f2": ["s2", "a2"] }
内容的提问来源于stack exchange,提问作者Minyi Han
相关产品推荐
相关产品推荐

