Javascript 如果键是数组元素,则访问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

假设我从服务器接收JSON对象,如下所示

{ "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解析