在javascript奇怪的错误中访问json数据

时间:2014-10-07 16:07:23

标签: javascript arrays json

我从Web服务返回json字符串,我可以轻松访问它,但有时它表现得很奇怪,我找不到原因。  这是我通过Web服务获取的json字符串

{"current":"2014-10-07T17:53:03+02:00","T1":{"0":[null],"1":[null],"2":[null],"3":[null],"4":[null],"5":[null],"6":[{"name":"ABC","value":63}]},"T2":{"0":[null],"1":[null],"2":[null],"3":[null],"4":[null],"5":[null]},"T3":{"0":[null],"1":[null],"2":[null],"3":[null],"4":[null],"5":[null]},"T4":{"0":[null],"1":[null],"2":[null],"3":[null],"4":[null],"5":[null]},"T5":{"0":[null],"1":[null],"2":[null],"3":[null],"4":[null],"5":[null]}}

我可以轻松访问它们并且它工作正常,除非在任何T1,T2,T3等的第0个位置上有空值。它会返回此错误TypeError: Cannot read property '0' of undefined

这就是我访问数据的方式

    if(json.T1 != undefined) {
        for (var i = 0; i < len; i++) {
            if(json.T1[i][0] == null) {
                t1.push(NaN)
            }
            else
            {
                t1.push(json.T1[i][0]["value"])
            }
        }
     }

我不明白为什么这种情况在所有情况下都有效,因为它具有T1,T2的第0位的空位...等等

2 个答案:

答案 0 :(得分:1)

你必须改变一些事情。 试试这种方式:http://jsfiddle.net/csdtesting/jww96u92/

&#13;
&#13;
var k = {
  "current": "2014-10-07T17:53:03+02:00",
  "T1": {
    "0": [null],
    "1": [null],
    "2": [null],
    "3": [null],
    "4": [null],
    "5": [null],
    "6": [{
      "name": "ABC",
      "value": 63
    }]
  },
  "T2": {
    "0": [null],
    "1": [null],
    "2": [null],
    "3": [null],
    "4": [null],
    "5": [null]
  },
  "T3": {
    "0": [null],
    "1": [null],
    "2": [null],
    "3": [null],
    "4": [null],
    "5": [null]
  },
  "T4": {
    "0": [null],
    "1": [null],
    "2": [null],
    "3": [null],
    "4": [null],
    "5": [null]
  },
  "T5": {
    "0": [null],
    "1": [null],
    "2": [null],
    "3": [null],
    "4": [null],
    "5": [null]
  }
};
var t1 = [];
console.log(k);
if (k.T1 != undefined) {
  $.each(k.T1, function(i, item) {
    if (item[0] == null) {
      t1.push(NaN)
    } else {
      alert("I just put " + item[0]["value"] + "in t1 array!Thanks!");
      t1.push(item[0]["value"])
    }
    console.log(item);
  });
  console.log(t1);

}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

那是因为len属性并不代表进入T1对象的项目的正确长度。 尝试通过枚举T1对象属性来获取长度。

var len = 0;
for(var item in json.T1){
   len++;
}

然后,尝试您提供的脚本。这应该有用。