我从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位的空位...等等
答案 0 :(得分:1)
你必须改变一些事情。 试试这种方式:http://jsfiddle.net/csdtesting/jww96u92/
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;
答案 1 :(得分:0)
那是因为len属性并不代表进入T1对象的项目的正确长度。 尝试通过枚举T1对象属性来获取长度。
var len = 0;
for(var item in json.T1){
len++;
}
然后,尝试您提供的脚本。这应该有用。