javascript - 在不使用 eval 的情况下通过键路径从嵌套的 JSON 字典中获取值

标签 javascript json eval

我想通过动态构造的键路径访问嵌套的 JSON 字典。
keypath 使用标准的 JSON 点和下标运算符。 (.[x])
例如:

var data = 
{"title": "a_title",
 "testList": [
   {
     "testListItemKey": "listitem1"
   },
   {
     "testListItemKey": "listitem2",
          "deepTestList": [
            {
              "testListItemKey": "listitem1",
                      "testListItemDict":{
                         "subTitle": "sub_title",
                      }
            }]
   }]
}

一个示例键路径字符串是:

data.feedEntries[0].testList[2].deepTestList[1].testListItemDict.subTitle  

到目前为止,我发现的最简单的工作解决方案是使用 eval 或函数构造函数:

function valueForKeypPath(data, keyPath) {
    "use strict";
    var evaluateKeypath = new Function('data', 'return data.' + keyPath);
    return evaluateKeypath(data);
}

由于我不能完全信任从远程端点接收到的 JSON 数据,所以我想避免 eval 等。

最佳答案

将所有 "[" 替换为 ".""]""" 这样你就可以得到到

feedEntries.0.testList.2.deepTestList.1.testListItemDict.subTitle

像使用路径一样将其拆分为路径数组。split('.')

var paths =  ['feedEntries','0','testList','2']

然后就

var root = data;
paths.forEach(function(path) {
   root = root[path];
});

末尾的根包含所需的数据片段。

关于javascript - 在不使用 eval 的情况下通过键路径从嵌套的 JSON 字典中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16260949/

相关文章:

python - 不使用 eval() 直接将 python 字符串转换为字节

JavaScript、Eval 和 New——穷人的工厂

javascript - .单击使用 id 进行工作?

javascript - 只需使用 javascript 即可通过用户输入查询基于 JSON 的 API

javascript - 如何让这个 Javascript 函数正确迭代?

java - 使用 JSONObject 和 JSONArray 创建 json 字符串

javascript - 使用 jQuery 添加输入后验证不起作用

jquery - 如何在 AJAX 请求中实现 jQuery 旋转图像

jquery - HandleBar 模板 & jQuery 移动 & 动态 ListView

perl - Perl 中处理异常的最佳方法是什么?