3

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

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

一个示例 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 et.al。

4

2 回答 2

5

全部替换"["".""]"到,""这样你就可以到

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];
});

最后根包含所需的数据片段。

于 2013-04-28T08:26:15.873 回答
0

如果你使用“下划线”,我推荐underscore-keypath

于 2014-02-10T00:44:49.307 回答