从包含密钥路径的字符串中获取json值
Get json value from string containing key path
我有一个输入数组,路径类似
var path = ["foo","bar","baz"];
我有一个目标
var obj = {
"foo": {
"bar": {
"baz": "cake"
},
"notbar": {
"another": "value"
}
}
}
我想改变路径中的"baz"值。我知道我可以使用
obj[path[0]][path[1]][path[2]] = "value";
但我不知道数组会有多长。php和javascript anwser都很感激!
试试这个:
function getValueByPath(obj, path) {
var result = obj,
i;
for (i = 0; i < path.length; i++) {
try {
result = result[path[i]];
}
catch (e) {
return undefined;
}
}
return result
}
function setValueByPath(obj, path, value) {
var result = obj,
i;
for (i = 0; i < path.length - 1; i++) {
try {
result = result[path[i]];
}
catch (e) {
return;
}
}
if (typeof value == 'object') {
result[path[i]] = value;
}
}
给定变量初始化,getValueByPath(obj, path)
返回'cake'
,然后将其设置为setValueByPath(obj, path, 'value')
;现在CCD_ 5返回CCD_。
这样的东西应该能在中工作
function modify(obj, path, val) {
var e = obj, l = path.pop();
path.forEach(function(x) { x in e ? e = e[x] : e; });
if (typeof val === 'undefined') return e[l];
e[l] = val;
return e;
}
你可以称之为getter或setter
var what = modify(obj, path); // returns "cake"
modify(obj, path, 'new value');
var what2 = modify(obj, path); // now return "new value", object was modified
FIDDLE
这是我的不漂亮但有效的解决方案:
function setPropertyByPath(obj, path, value) {
if(!path || path.length === 0) return;
var property = path[0];
for(var i = 1; i < path.length; i++) {
property += "." + path[i];
}
property = "obj." + property + " = '"" + value + "'"";
eval(property)
}
然后你打电话给
setPropertyByPath(obj, path, "newValue");
这是一个正在工作的FIDDLE
相关文章:
- 如何使用 Node JS 获取 JSON 嵌套数组值
- 使用Javascript/JQuery获取JSON GET数据
- 在jQuery中获取JSON
- 如何使用jQuery按键搜索和获取json行数据
- 如何使用jquery获取Json的节点
- 通过字符串获取JSON对象
- 通过Azure存储以HTML形式获取JSON文件
- 获取JSON并使用Javascript解析为字符串
- 如何在angular中获取json对象的名称
- 如何使用angular获取json对象的名称
- 如何使用Ajax JQuery.ech()获取JSON值
- 可以't通过从googlemapapi获取json值
- 获取json结果的身份验证问题
- Javascript:获取 JSON 中的值计数
- 按服务获取JSON数据
- 如何使用javascript获取json元素
- 从javascript文件中获取JSON,并使用NodeJS在路由文件中显示
- 如何从给定的代码中获取JSON对象
- 获取 JSON 数据将数组项添加到变量
- 如何从具有动态可观察属性的淘汰对象中获取 JSON 字符串