Javascript 动态获取/设置JSON元素
这是我的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
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在技术上除了字符串之外没有其他任何东西,但这个术语用于会导致混淆的对象文本和数组