从API获取的大型JSON生成列表中条件筛选子列表
筛选列表中指定name的子列表解决方案
嘿,我来帮你搞定这个筛选需求!你的数据结构是顶层有80多个元素,每个里面的data字段是10个次级列表,要挑出其中name为**"My Color"**的那些对吧?
这里有两种常用的方法,你可以根据自己的习惯选择:
方法1:用purrr包(简洁高效)
purrr是tidyverse生态里专门处理列表的工具,代码可读性拉满。如果还没安装这个包,先跑安装命令:
install.packages("purrr")
然后执行筛选代码(记得把api_data替换成你实际的列表变量名):
library(purrr) filtered_results <- api_data %>% # 提取每个顶层元素中的$data子列表 map("data") %>% # 对每个$data列表,仅保留name等于"My Color"的子项 map(~ keep(.x, ~ .x$name == "My Color")) %>% # 将嵌套列表扁平化,得到一维的结果列表 flatten()
方法2:基础R循环(无需额外包)
如果不想安装新包,用基础R的循环也能实现相同效果:
# 初始化空列表存储筛选结果 filtered_results <- list() # 遍历顶层的每个元素 for (top_item in api_data) { # 筛选当前顶层元素$data中name为"My Color"的子列表 matching_items <- top_item$data[sapply(top_item$data, function(sub_list) sub_list$name == "My Color")] # 将匹配项追加到结果列表中 filtered_results <- c(filtered_results, matching_items) }
两种方法都能准确捞取所有符合条件的子列表,就算部分顶层元素的data里没有"My Color"的项,代码也会自动跳过,不会出现报错~
内容的提问来源于stack exchange,提问作者DeduciveR
相关产品推荐
相关产品推荐

