2013-04-28 57 views
2

我想通过动态构建的keypath访问嵌套的JSON字典。
keypath使用标准的JSON点和下标运算符。 (.[x]
例如:通过keypath从嵌套的JSON字典中获取值而不使用eval

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 。

+0

可能重复[在javascript中如何动态获取对象的嵌套属性(http://stackoverflow.com/questions/6906108/ in-javascript-how-can-i-dynamic-get-a-nested-property-of-an-object) – Quentin 2013-04-28 08:22:55

+0

这已被问了很多次。 – user2246674 2013-04-28 08:27:49

回答

4

更换所有"["".""]"""等你拿

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

在端部根包含所期望的数据片段。