如何从动态嵌套数组JSON中提取指定路径下modelTemplates的全部id值
JSON指定路径ID提取实现方案
针对你给出的JSON结构和提取需求,最终可得到的目标数组结果为[1, 2],可通过以下几种主流技术方案实现:
原生嵌套遍历方案(无第三方依赖)
不需要引入任何外部工具库,兼容性最高,适合轻量级项目场景,核心逻辑为三层嵌套遍历跳过空数组即可。
JavaScript实现示例:
// 原JSON数据已解析为data对象 const templateIds = [] data.modelGroups.forEach(group => { group.subModelGroups.forEach(subGroup => { subGroup.modelTemplates.forEach(tpl => { templateIds.push(tpl.id) }) }) })
Python实现示例:
# 原JSON数据已解析为data字典 template_ids = [] for group in data["modelGroups"]: for sub_group in group["subModelGroups"]: for tpl in sub_group["modelTemplates"]: template_ids.append(tpl["id"])
JSONPath工具方案(适配动态路径需求)
如果提取路径需要动态配置,或者不想编写多层嵌套逻辑,可以使用专门的JSONPath工具直接匹配你给出的路径表达式。
JavaScript环境使用jsonpath库实现示例:
const jp = require('jsonpath') const templateIds = jp.query(data, '$.modelGroups[*].subModelGroups[*].modelTemplates[*].id')
Python环境使用jsonpath-ng库实现示例:
from jsonpath_ng import parse expr = parse('$.modelGroups[*].subModelGroups[*].modelTemplates[*].id') template_ids = [match.value for match in expr.find(data)]
函数式链式调用方案(代码更简洁)
支持数组高阶方法的开发语言可以用拍平数组的方式简化嵌套逻辑,代码可读性更高。
JavaScript实现示例:
const templateIds = data.modelGroups .flatMap(group => group.subModelGroups) .flatMap(subGroup => subGroup.modelTemplates) .map(tpl => tpl.id)
Python实现示例:
template_ids = [ tpl["id"] for group in data["modelGroups"] for sub_group in group["subModelGroups"] for tpl in sub_group["modelTemplates"] ]
注意:以上所有方案都会自动跳过空的
modelTemplates数组,无需额外做空值兼容判断,不会触发运行异常。
内容的提问来源于stack exchange,提问作者Virender Kamboj
相关产品推荐
相关产品推荐

