Javascript 动态获取/设置JSON元素

Javascript 动态获取/设置JSON元素,javascript,jquery,json,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和keypa

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

可以使用类似的方式使用“小键盘”作为键来访问对象上的属性

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";
// 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
//在上拆分。并浏览myobject。
//如果找到属性并再次检查,则更新上下文,否则返回null
var getModuleFromString=函数(moduleName,myobject){
var fields=moduleName.split('.'),cur=myobject | | window;

对于(var i=0;i您可以尝试在属性之间循环

function findProperty(jsonItem, key){
    for(var prop in jsonItem){
        if(typeof prop === 'object'){
            iterate(jsonItem[prop], key);
        } else if(key == prop){
            return jsonItem["prop"];
        }
    }
}

但这将只返回它遇到的第一个匹配项。

无法发布它的代码,因为我在手机上,但您需要一个循环,将对象设置到下一个级别并返回最终值。如果这是唯一的用途,可能会简化创建
keypay1
的方式
var keypay=“payload”;console.log(json[keypay].pay1)
类似于此。假设您想要访问123值,只需尝试
console.log(json.payload.pay1)
您也可以访问它。您如何获取这些属性的字符串,如
'payload.pay1.offers.rank'
。应该查看那里以存储不同的内容。当您进入JSON时,最好使用
hasOwnProperty
。只是为了故障安全。啊,很好。这很有效。但是var keypay1=“payload.pay1”举个例子。如果变量有多个节点怎么办示例:payload.pay1.offers.rank-是否有一种高效、动态的方式在JSON[]中传递拆分变量?@Pataar不,这不是你指的JSONabove@charlietfl也许我应该使用“Javascript对象”而不是“JSON”,但在这种情况下,在使用它之前,你应该先检查属性是否存在。@Pataar非常有效,我的主要观点是JSON在技术上除了字符串之外没有其他任何东西,但这个术语用于会导致混淆的对象文本和数组