如何将单层R列表转换为多层嵌套列表?支持递归适配JSON解析
递归实现带点分隔键的列表转嵌套列表
核心递归函数
以下是可以处理任意深度嵌套的R函数,能自动将带.分隔键的单层列表转换为多层嵌套结构,完美适配JSON解析需求:
flatten_to_nested <- function(input_list) { result <- list() for (key in names(input_list)) { value <- input_list[[key]] key_parts <- strsplit(key, "\\.")[[1]] if (length(key_parts) == 1) { result[[key]] <- value } else { parent_key <- key_parts[1] child_key <- paste(key_parts[-1], collapse = ".") if (!parent_key %in% names(result)) { result[[parent_key]] <- list() } result[[parent_key]] <- c(result[[parent_key]], flatten_to_nested(setNames(list(value), child_key))) } } result }
示例使用
用你的输入列表测试:
# 输入的单层列表 have <- list("a" = 1, "b.a" = 2, "b.b" = 3) # 执行转换 need <- flatten_to_nested(have) # 查看转换结果 str(need)
输出结果:
List of 2 $ a: num 1 $ b:List of 2 ..$ a: num 2 ..$ b: num 3
函数说明
- 递归逻辑:每次将键按
.拆分,若拆分后长度大于1,则把第一个键作为父节点,剩余部分重新拼接成子键,递归处理该子项并合并到父节点的列表中 - 兼容性:支持任意深度的嵌套键(比如
"x.y.z"这类键会自动生成三层嵌套列表),完全匹配JSON的嵌套结构规则,转换后的列表可以直接用jsonlite::toJSON()生成标准JSON格式
内容的提问来源于stack exchange,提问作者Léon Ipdjian
相关产品推荐
相关产品推荐

