访问JSON值假设我接收JSON对象从服务器因为这如果键是数组元素
{ "asdf[zxcv]": "qwer" }
如何访问asdf
,zxcv
,和在javascript qwer
,所以我可以使用这种方式的对象?
theobj.asdf[zxcv] = 'qwer'
访问JSON值假设我接收JSON对象从服务器因为这如果键是数组元素
{ "asdf[zxcv]": "qwer" }
如何访问asdf
,zxcv
,和在javascript 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(function(result, key) {
var parentKey = key.substring(0, key.indexOf("["));
var innerKey = /[a-z]+\[([a-z]+)\]/i.exec(key)[1];
if (!result.hasOwnProperty(key))
result[parentKey] = {};
result[parentKey][innerKey] = y[key];
return result;
}, {});
document.getElementById("structure").textContent = JSON.stringify(result);
var zxcv = result["asdf"]["zxcv"];
document.getElementById("someValue").textContent = zxcv;
<h2>Refactored data structure as nested objects:</h2>
<div id="structure"></div>
<h2>Accessing some value: result["asdf"]["zxcv"] or result.asdf.zxcv</h2>
<div id="someValue"></div>
这是所有关于创建嵌套对象来表示在源JSON性质代表的概念关联的关联键array ...
这是访问所有元素而不重建对象的方法之一。
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或其他东西,否则这是没有意义的。 – Andy
在你的例子中,'zxcv'不是一个变量,而是'asdf'的关联关键字。 – GiamPy