如何递归合并多层嵌套JSON对象的同名键(R语言实现)
R语言嵌套JSON同名键深度合并方案
你需要的是递归深度合并嵌套列表的能力,无需自行编写多层循环,有两种成熟实现方式,均支持任意层级的复杂JSON结构处理:
方案1:使用rlist包(最简便,推荐)
rlist包内置的list.merge()函数原生支持递归合并所有层级的同名键,一行代码即可完成需求:
# 首次使用先安装包 install.packages("rlist") # 加载包 library(rlist) # 递归合并所有JSON对象,!!!为参数展开操作符 final_object <- list.merge(!!!json_object) # 可选:转JSON查看输出结果 library(jsonlite) writeLines(toJSON(final_object, auto_unbox = TRUE, pretty = TRUE))
方案2:自定义递归合并函数(无额外依赖)
如果不想引入第三方包,可以用自定义递归函数配合Reduce完成合并,适配任意嵌套深度的结构:
# 定义递归合并逻辑 recursive_merge <- function(exist_list, new_list) { for (key in names(new_list)) { # 双方都存在当前键且值均为列表时,递归合并下一层 if (key %in% names(exist_list) && is.list(exist_list[[key]]) && is.list(new_list[[key]])) { exist_list[[key]] <- recursive_merge(exist_list[[key]], new_list[[key]]) } else { # 否则直接赋值/新增键 exist_list[[key]] <- new_list[[key]] } } return(exist_list) } # 批量合并所有JSON对象 final_object <- Reduce(recursive_merge, json_object)
两种方案输出的结构均和你预期的规整结构完全一致,后续处理嵌套层级更多的复杂JSON数据时也无需修改逻辑,直接调用即可。
内容的提问来源于stack exchange,提问作者Walleo
相关产品推荐
相关产品推荐

