2016-02-27 140 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 */ 
     } 
     }); 
} 

下一次请提供一些示例数据,这使得更多的回答轻松。

因为它可能是数组或对象...需要不同的处理。

相关问题