【问题标题】:how to skip undefined properties in JSON?如何跳过 JSON 中的未定义属性?
【发布时间】:2010-10-20 18:45:35
【问题描述】:

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

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

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

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

类似的东西似乎不能解决问题。为什么?

【问题讨论】:

    标签: json parsing


    【解决方案1】:

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

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

    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 ***/
    }
    

    【讨论】:

    • 另外,作为一名自学成才的开发人员,!== 在 JS 中有效吗?或者就足够了!=
    • @camelCase:基本上,使用严格版本(===!==)比使用类型强制版本(==!=)更好。
    • 顺便说一句,我得到的错误是“无法读取属性”,所以值等于“未定义”不是问题,但我想问题是属性本身不存在.. . 我希望我很清楚..
    • @camelCase:详见this question
    • @camelCase:你确定所有之前的属性都存在了吗?例如确保data 具有placemark 属性,placemark 具有[i 解析为的任何属性],等等?
    【解决方案2】:

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

    对于你的问题,你可以测试一下:

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

    【讨论】:

    • Locality.length 检查没有任何意义。
    猜你喜欢
    • 2018-04-20
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多