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

JavaScript中如何使用字符串作为JSON对象的选择器

从JSON对象中通过键路径提取数据的解决方案

我需要从名为results的JSON对象中提取大量数据,已经把所需的键路径存在myKeys对象里了。怎么用myKeys里的值作为results的选择器,获取像results.array1.array2.key、results.array1.anotherThing.key这类路径对应的数据?

用户提供的初始代码:

const myKeys = {
    key1: '.array1.array2.key',
    key2: '.array1.anotherThing.key',
    key3: '.array1.somethingElse.array2.key'
}

for (let [key, value] of Object.entries(myKeys)){
    let data = {name: key, results: results[value]}
}

问题分析

你当前的代码里results[value]无法正确获取值,因为value是带点的字符串(比如.array1.array2.key),对象的方括号语法只能直接访问单个键,不能解析带点的路径字符串。

解决方案

方法1:手动拆分路径遍历

把路径字符串拆成单个键名,然后一步步遍历对象获取对应值:

const myKeys = {
    key1: '.array1.array2.key',
    key2: '.array1.anotherThing.key',
    key3: '.array1.somethingElse.array2.key'
};

const extractedData = [];

for (let [alias, path] of Object.entries(myKeys)) {
    // 去掉路径开头的点,把字符串拆成键名数组
    const keyList = path.slice(1).split('.');
    let currentValue = results;
    
    // 逐个键名访问对象
    for (const key of keyList) {
        // 中途遇到不存在的键或null,直接终止遍历
        if (currentValue == null) break;
        currentValue = currentValue[key];
    }
    
    extractedData.push({ name: alias, results: currentValue });
}

方法2:用reduce简化代码

利用数组的reduce方法,把路径遍历逻辑压缩成更简洁的写法,同时用可选链操作符避免报错:

const myKeys = {
    key1: '.array1.array2.key',
    key2: '.array1.anotherThing.key',
    key3: '.array1.somethingElse.array2.key'
};

const extractedData = Object.entries(myKeys).map(([alias, path]) => {
    // 拆分路径并通过reduce逐层访问
    const targetValue = path.slice(1).split('.').reduce((obj, key) => {
        return obj?.[key]; // 可选链:如果obj不存在直接返回undefined,不会报错
    }, results);
    
    return { name: alias, results: targetValue };
});

注意事项

  • 如果你的路径里包含数组索引(比如.array1[0].key),上面的方法需要额外处理:可以先把[x]格式的索引拆分出来,再通过数组下标访问。
  • 可选链操作符?.需要运行环境支持ES2020及以上,如果是旧环境,替换成obj && obj[key]的条件判断即可。

内容的提问来源于stack exchange,提问作者Gerg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:25:10