这是我的JSON变量。
var json = { input: "hello", payload: { pay1: 123, pay2: 456 } };
现在,我有一个变量keypay1
var keypay1 = "payload.pay1";
问题1:如何仅使用动态变量json和keypay1获取json.payload.pay1的值?我试过这个,它给了我未定义的。
console.log( json[keypay1] );
同样,问题2:如何仅使用动态变量json和keypay1设置json.payload.pay1的值???
答案 0 :(得分:2)
var json = { input: "hello", payload: { pay1: 123, pay2: 456 } };
var parts = "payload.pay1".split('.');
// get the value
console.log(json[parts[0]][parts[1]]); // 123
// set the value
json[parts[0]][parts[1]] = "foo";
答案 1 :(得分:0)
可以使用这样的东西来使用"键盘#34;作为访问对象属性的键
// Split on . and browse myobject.
// Update context if property found and check again, else return null
var getModuleFromString = function(moduleName, myobject) {
var fields = moduleName.split('.'), cur = myobject || window;
for(var i=0; i<fields.length; i++){
if(typeof cur[fields[i]] === "undefined") return null;
cur = cur[fields[i]];
}
return cur;
};
var json = { input: "hello", payload: { pay1: 123, pay2: 456, pay3: { a:1, b:2 } } };
var keypay1 = "payload.pay1";
console.log(getModuleFromString(keypay1, json));
// 123
console.log(getModuleFromString("payload.pay3.a", json));
// 1
答案 2 :(得分:0)
您可以尝试循环浏览属性。
function findProperty(jsonItem, key){
for(var prop in jsonItem){
if(typeof prop === 'object'){
iterate(jsonItem[prop], key);
} else if(key == prop){
return jsonItem["prop"];
}
}
}
但是,它只返回它遇到的第一场比赛。