动态获取/设置JSON元素

时间:2014-12-23 07:55:47

标签: javascript jquery json

这是我的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的值???

3 个答案:

答案 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"];
        }
    }
}

但是,它只返回它遇到的第一场比赛。