Javascript 通过keypath从嵌套的JSON字典中获取值,而不使用eval

Javascript 通过keypath从嵌套的JSON字典中获取值,而不使用eval,javascript,json,eval,Javascript,Json,Eval,我想通过动态构造的keypath访问嵌套的JSON字典。 keypath使用标准的JSON点和下标运算符。(和[x]) 例如: 一个示例keypath字符串是: data.feedEntries[0].testList[2].deepTestList[1].testListItemDict.subTitle 到目前为止,我发现最简单的工作解决方案是使用eval或函数构造函数: function valueForKeypPath(data, keyPath) { "use stric

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

例如:

一个示例keypath字符串是:

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
像使用path一样将其拆分为路径数组。
Split('.')

那就

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

在末尾,root包含所需的数据片段。

如果您使用的是“下划线”,我建议

已经多次询问过可能的重复项。。
var paths =  ['feedEntries','0','testList','2']
var root = data;
paths.forEach(function(path) {
   root = root[path];
});