2016-02-27 141 views
-1

我從外部網站拉取json。我抓住,從他們的JSON這一串代碼爲我解析它:JSON失敗並繼續執行代碼

breweryName = data.data[i].breweries[0].name; 

的問題是,在我收到不具備啤酒廠[0]。名稱值的JSON中的一個條目。

如何繼續執行代碼?儘管一個不好的條目?我嘗試這樣做:

if(data.data[i].breweries[0].name === "undefined"){ 
    breweryName = "N/A" 
} 
else{ 
    breweryName = data.data[i].breweries[0].name; 

} 

還是失敗

+0

不知道爲什麼我像往常一樣被拒絕。 – Mike

回答

-1

在JavaScript中,使用typeof功能

if (typeof data.data[i].breweries === "undefined" || 
    typeof data.data[i].breweries[0] === "undefined" || 
    typeof data.data[i].breweries[0].name === "undefined") 

,你可能還需要包括

if (data.data[i].breweries[0].name.trim() === "") 

檢查名稱是存在,但是空的。

的快捷方法可以工作以及...

breweryName = data.data[i].breweries[0].name || "N/A" 
+0

錯誤是訪問未定義的name屬性的結果,這是[0]等於的內容。這些方法都沒有解決這個問題,也沒有暗示它的存在。 –

+0

@TravisJ OP詢問 「問題是我收到的JSON中的一個條目沒有brewures [0] .name的值。」爲什麼你決定訪問屬性'名稱'的未定義? –

+0

** typeof **允許您測試是否存在變量或屬性。如果typeof返回undefined,那麼您知道該變量尚未定義,並且可以避免訪問它,這會導致錯誤。這種方法是處理這個問題的常用方法。 – user2182349

0

此首先檢查是否存在在給定的索引ibreweries並且如果存在嵌套元件,通過檢查大小屬性;內環內,它會檢查name屬性與typeof()

if(
    typeof(data.data[i].breweries) !== 'undefined' && 
    data.data[i].breweries.size > 0 
){ 
     /* traverse the individual entries */ 
     data.data[i].breweries.forEach(function(v, i){ 
     if(typeof(v.name) !== 'undefined'){ 
      /* the element has a name property */ 
     } else { 
      /* name property is absent */ 
     } 
     }); 
} 

下一次請提供一些示例數據,這使得更多的回答輕鬆。

因爲它可能是數組或對象...需要不同的處理。

相關問題