我想通过动态构造的键路径访问嵌套的 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/