Как пропустить неопределенные свойства в JSON? - PullRequest
1 голос
/ 20 октября 2010

Когда я анализирую поля JSON, приходящие с карт Google и т. Д., Это беспорядок. Поскольку они не созданы специально для моего сценария, я должен проверить много деталей, особенно потому, что адреса в каждой стране разные.

Короткий вопрос: когда скрипт находит неопределенное свойство, скрипт ломается ... ошибка ..

Как проверить, определено ли свойство?

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

Нечто подобное не решает проблему. Почему?

Ответы [ 2 ]

3 голосов
/ 20 октября 2010

В JavaScript при доступе к свойству несуществующего объекта возвращается undefined, а не null - черт, вы сказали это в заголовке.

Итак, предполагая, что all предыдущие свойства действительно существуют, вы можете проверить, существует ли свойство Locality, используя typeof, например:

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

Или (I думаю ) вы можетеиспользуйте hasOwnProperty():

if (data.
    Placemark[i].
    AddressDetails.
    Country.
    AdministrativeArea.
    SubAdministrativeArea.hasOwnProperty('Locality'))
{
    /*** do something ***/
}
0 голосов
/ 20 октября 2010

Во-первых, в javascript вы можете использовать «try / catch», как java или другой язык программирования, это может позволить вашему коду продолжить работу, если что-то пойдет не так ...

для вашей проблемы, вы можете проверить, что:

if (typeof(data.Placemark[i].AddressDetails.Country
               .AdministrativeArea.SubAdministrativeArea.Locality) 
    &&
      data.Placemark[i].AddressDetails.Country
               .AdministrativeArea.SubAdministrativeArea.Locality.length>0) {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...