2014-10-07 25 views
1

我從Web服務返回json字符串,我可以很容易地訪問它,但有時它表現奇怪,我找不到原因。 下面是我通過Web服務在JavaScript中訪問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個位置...等空細JSON字符串。它返回該錯誤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"]) 
      } 
     } 
    } 

我不明白爲什麼這個工程在所有情況下excpet有T1,T2的第0個位置的空...等

+1

錯誤意味着你正試圖訪問一個不存在的屬性,即'json.T1 [i]'返回'undefined'。 len的價值是什麼?如果它大於6,那麼這就是爲什麼你會得到這個錯誤。 'json.T1 [7]'在你的例子中不存在。 – 2014-10-07 16:10:16

+0

爲什麼不在這裏測試'undefined'? 'json.T1 [i]' – melancia 2014-10-07 16:17:35

回答

0

這是因爲LEN屬性不表示是到T1對象的物品的合適的長度。 嘗試通過枚舉T1對象屬性來獲取長度。

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

然後,嘗試您提供的腳本。這應該工作。

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); 
 

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

+0

OP從來沒有提到過jQuery。另外,你改變了什麼?有什麼問題?只是發佈代碼並說「嘗試這個」並不是很有幫助。 – 2014-10-07 17:27:04

+0

上面顯示的代碼不完整。什麼是json val?那裏是初始化?什麼是len?所以我試着用相同的邏輯,但以其他方式訪問[0]元素(如果你在代碼中看到)並且沒有錯誤導致。我認爲是一種解決方案。如果我擁有所有的代碼,我會以更多他/她的錯誤。 – 2014-10-07 17:31:52

+0

但是在某種程度上,myabe你有權利給我一個工作方案來解決這個案例的邏輯,但是我沒有回答關於錯誤本身的問題。我更加實際。 :) – 2014-10-07 17:33:44