You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将单层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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:22:12