如何在JSON中跳过未定义的属性?

时间:2010-10-20 18:45:35

标签: json parsing

当我解析来自谷歌地图等的JSON字段时,这是一团糟。因为它们不是专门为我的脚本制作的,所以我必须验证很多细节,特别是因为每个国家的地址都不同。

简短问题:当脚本找到未定义的属性时,脚本会中断...错误..

如何验证属性是否已定义?

if(data.Placemark[i].AddressDetails.Country
       .AdministrativeArea.SubAdministrativeArea.Locality != null) {
         /***do something***/
}

这样的事情似乎无法解决问题。为什么呢?

2 个答案:

答案 0 :(得分:3)

在JavaScript中,访问不存在的对象的属性会返回undefined,而不是null - 哎呀,你在标题中说了这个。

因此,假设 all 以前的属性确实存在,您可以使用Locality检查typeof属性是否存在,如下所示:

if(typeof (data.
           Placemark[i].
           AddressDetails.
           Country.
           AdministrativeArea.
           SubAdministrativeArea.
           Locality) !== 'undefined') {
    /***do something***/
}

或者,(我)您可以使用hasOwnProperty()

if (data.
    Placemark[i].
    AddressDetails.
    Country.
    AdministrativeArea.
    SubAdministrativeArea.hasOwnProperty('Locality'))
{
    /*** do something ***/
}

答案 1 :(得分:0)

首先,在javascript中你可以像java或其他编程语言一样使用“try / catch”,如果出现问题,这可以让你的代码继续运行......

对于您的问题,您可以测试:

if (typeof(data.Placemark[i].AddressDetails.Country
               .AdministrativeArea.SubAdministrativeArea.Locality) 
    &&
      data.Placemark[i].AddressDetails.Country
               .AdministrativeArea.SubAdministrativeArea.Locality.length>0) {
}