如何移除列表外层实现预期JSON格式?解决unbox()报错问题
解决方案:精准移除列表外层嵌套结构
你需要移除列表的最外层嵌套,生成不含外层数组的JSON,以下是几种精准可控的方法:
方法1:直接提取内层列表(最简便)
你的people是长度为1的外层列表,直接提取其第一个元素就能精准去掉外层结构,再转JSON即可:
library(jsonlite) people <- list( list( person_1 = list( first_name = 'ted', last_name = 'johnson', age = 45 ), person_2 = list( first_name = 'pam', last_name = 'wilson' ) ) ) # 提取内层列表 people_clean <- people[[1]] # 生成目标JSON toJSON(people_clean, pretty = TRUE)
输出结果完全符合预期:
{ "person_1": { "first_name": ["ted"], "last_name": ["johnson"], "age": [45] }, "person_2": { "first_name": ["pam"], "last_name": ["wilson"] } }
方法2:用purrr::pluck语义化提取
如果嵌套层级更复杂,想让代码语义更清晰,可以用purrr::pluck指定提取第一层元素:
library(purrr) library(jsonlite) people_clean <- pluck(people, 1) toJSON(people_clean, pretty = TRUE)
补充:修正list_flatten的用法
你提到的purrr::list_flatten其实也能实现,只要指定depth = 1限制扁平化仅作用于最外层:
library(purrr) library(jsonlite) people_clean <- list_flatten(people, depth = 1) toJSON(people_clean, pretty = TRUE)
为什么之前的方法失效?
jsonlite::unbox():这个函数的作用是把长度为1的原子向量/单行数据框从JSON数组转为单个值,并非处理列表嵌套,所以会报错。- 无参数的
list_flatten():默认会扁平化所有嵌套层级,超出了你需要的精准范围。
内容的提问来源于stack exchange,提问作者joshbrows
相关产品推荐
相关产品推荐

