如果key是数组元素,则访问JSON值

时间:2015-09-15 10:11:45

标签: javascript json

假设我从服务器接收JSON对象

{ "asdf[zxcv]": "qwer" }

如何在javascript中访问asdfzxcvqwer,以便我可以这样使用该对象?

theobj.asdf[zxcv] = 'qwer'

4 个答案:

答案 0 :(得分:0)

Bracket符号不在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

答案 1 :(得分:0)

您需要源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>
&#13;
&#13;
&#13;

所有关于创建嵌套对象以表示源JSON属性中表示概念关联数组的关联键...

答案 2 :(得分:0)

这是在不重建对象的情况下访问所有元素的方法之一。

   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"

});

答案 3 :(得分:-1)

您需要将数据分配给变量,然后您可以使用对象键来获取:之前的部分键。这是一个例子。

var j = { "asdf[zxcv]": "qwer" };

console.log(Object.keys(j)); //["asdf[zxcv]"]
console.log(j); //{asdf[zxcv]: "qwer"}