Javascript 如果键是数组元素,则访问JSON值
假设我从服务器接收JSON对象,如下所示Javascript 如果键是数组元素,则访问JSON值,javascript,json,Javascript,Json,假设我从服务器接收JSON对象,如下所示 { "asdf[zxcv]": "qwer" } 如何在javascript中访问asdf、zxcv和qwer,以便以这种方式使用对象 theobj.asdf[zxcv] = 'qwer' 您需要将数据分配给一个变量,然后可以使用对象键获取键,该键是:前面的部分。这里有一个例子 var j = { "asdf[zxcv]": "qwer" }; console.log(Object.keys(j)); //["asdf[zxcv]"] consol
{ "asdf[zxcv]": "qwer" }
如何在javascript中访问asdf
、zxcv
和qwer
,以便以这种方式使用对象
theobj.asdf[zxcv] = 'qwer'
您需要将数据分配给一个变量,然后可以使用对象键获取键,该键是
:
前面的部分。这里有一个例子
var j = { "asdf[zxcv]": "qwer" };
console.log(Object.keys(j)); //["asdf[zxcv]"]
console.log(j); //{asdf[zxcv]: "qwer"}
括号符号不在JSON RFC中。您只能将其作为字符串读取
var simpleObj = {
"simpleKey": "simpleValue"
}
console.log(simpleObj)
var advObj = {
"advKey[1]": "advValue"
}
console.log(JSON.parse(advObj)); // SyntaxError
console.log(advObj.advKey[1]) // TypeError
console.log(advObj["advKey[1]"]) // can only read as string
您需要将源JSON重构为更有意义的内容,以便能够以常规JavaScript方式访问这些值
运行以下代码段以检查如何解决此问题:
var x='{“asdf[zxcv]:“qwer”}';
var y=JSON.parse(x);
var result=Object.keys(y).reduce(函数(结果,键){
var parentKey=key.substring(0,key.indexOf(“[”));
var innerKey=/[a-z]+\[([a-z]+)\]/i.exec(key)[1];
如果(!result.hasOwnProperty(键))
结果[parentKey]={};
结果[parentKey][innerKey]=y[key];
返回结果;
}, {});
document.getElementById(“结构”).textContent=JSON.stringify(结果);
var zxcv=结果[“asdf”][“zxcv”];
document.getElementById(“someValue”).textContent=zxcv;
将数据结构重构为嵌套对象:
访问某些值:result[“asdf”][“zxcv”]或result.asdf.zxcv
这是一种无需重建对象即可访问所有元素的方法
jQuery.each(JSON.parse('{ "asdf[zxcv]": "qwer" }'), function(index, value) {
var i = index;// i = "asdf[zxcv]"
var v = value;// v = "qwer"
var iOfInnerValue = (/\[(.*?)\]/g).exec(i)[1];// innerValue = "zxcv"
var iOfOuterValue = index.replace("["+(/\[(.*?)\]/g).exec(i)[1]+"]",""); // outerValue = "asdf"
});
您需要按语法创建键字符串,然后才能访问它的值。您想要访问
zxcv
是什么意思?除非您考虑ES6 WeakMap或其他什么东西,否则这没有意义。在您的示例中zxcv
不是一个变量,而是asdf
的关联键。对不起,我的意图不明确r、 我刚刚编辑以消除混淆。我需要访问数组名asdf
、索引zxcv
、值qwer
。请不要通过字符串/regex解析