如何使JSON文件指定路径的索引动态化以添加多状态?
动态访问JSON嵌套路径的解决方案
直接用变量替换固定键
最直接的方式是把固定的'1'换成变量,比如runId,直接通过变量访问目标值:
// 定义动态的run ID,可替换为1、2、3等 const runId = '2'; // 用数字2也可行,对象会自动将数字转为字符串键 const status = data[strSubModel][strChannel][strVdiv]['AdRawCheck']['response']['run'][runId]['status'];
如果需要批量获取多个run的status,用循环处理:
const runIds = ['1', '2', '3']; const statusList = []; for (const id of runIds) { const status = data[strSubModel][strChannel][strVdiv]['AdRawCheck']['response']['run'][id]['status']; statusList.push(status); } // statusList中会按顺序存储run 1、2、3对应的status值
通用路径访问函数(适配深层嵌套场景)
如果之前自定义函数失败,大概率是路径处理逻辑有问题,下面提供一个通用函数,支持传入包含动态片段的路径:
function getNestedValue(obj, pathSegments) { let current = obj; for (const segment of pathSegments) { if (current == null) return undefined; // 避免路径不存在时抛出错误 current = current[segment]; } return current; } // 使用示例:将动态runId作为路径片段传入 const runId = '3'; const path = [strSubModel, strChannel, strVdiv, 'AdRawCheck', 'response', 'run', runId, 'status']; const status = getNestedValue(data, path);
这个函数能适配任意嵌套深度的路径,还能提前拦截不存在的路径节点,避免报错。
关键注意事项
- 确认
run对应的是对象类型(而非数组),因为你用的是['1']这类字符串键;如果是数组,应该用数字索引(比如[0])。 - 确保
strSubModel、strChannel、strVdiv这些变量的值,确实是data对象中存在的键,否则会返回undefined。 - 批量访问时,可以先检查目标对象是否存在,避免循环内报错:
const runObj = data[strSubModel]?.[strChannel]?.[strVdiv]?.['AdRawCheck']?.['response']?.['run']; if (runObj) { // 直接获取所有run节点下的status值,无需手动维护runId列表 const statusList = Object.values(runObj).map(item => item.status); }
内容的提问来源于stack exchange,提问作者keyur
相关产品推荐
相关产品推荐

