2012-04-18 3 views
1

Как проверить, является ли дочерний атрибут объекта json нулевым? Хотя Firefox распознает его, Chrome и IE 8 этого не делают.Json - проверка дочернего узла null значение

У меня есть объект JSON, как это:

centralData.phone.id; 
centralData.address.id; 
centralData.product.id; 
//and many others 

И я хотел бы проверить, если некоторые из его атрибутов могут быть пустыми. Я делаю это, и это работает:

if(centralData.phone != null){ 
    //Do things 
} 

Но это не делают, так как это не всегда у меня есть StockGroup

if(centralData.product.StockGroup != null){ 
//Error 
} 

Итак, как я могу проверить, если centralData.product.StockGroup является недействительным?

+0

Что вы пытаетесь проверить точно? –

+0

Nitpicking: у вас нет объекта JSON. У вас есть объект или у вас есть JSON. Последний - это формат данных и только STRING. –

+0

Я только что отредактировал, чтобы уточнить. Спасибо, что указали это. – AdrianoRR

ответ

1

Вы не хотите проверять, есть ли это null, вы хотите проверить, существует ли свойство (в данном случае это будет undefined). Ваш чек работает, потому что вы используете == вместо ===, который преобразует типы (undefined == null, но undefined !== null).

Если вы хотите проверить вложенное свойство, вам необходимо проверить каждый уровень. Я бы рекомендовал использовать оператор in, поскольку он проверяет, существует ли свойство и игнорирует его значение.

Это делает то, что вы хотите сделать:

if("product" in centralData && "StockGroup" in centralData.product){ 
    … 
} 
+0

+1 для ключевого слова 'in'. – Jivings

+0

@ FB55 Это сработало. Однако мне нужно инициализировать свойство продукта, или я получаю 'centralData.product не объект '. Благодарю. – AdrianoRR

0

Вместо того, чтобы использовать null, попробуйте сравнить свой объект с неопределенным.

+0

Как 'if (centralData.product.StockGroup! = 'Undefined')'? Будет ли это работать в любом случае?Я видел несколько сообщений по сети, в которых говорится, что «undefined» не является надежным способом проверки нулевых объектов. – AdrianoRR

+0

Конечно, «неопределенные» проверки на «неопределенные» не равны нулю. Вот почему я сказал в своем комментарии к Q, чтобы понять, что вы проверяете. «undefined» означает «не существует (даже) существует», null НЕ существует и имеет значение, которое равно «null». Очень разные. –

+0

Да, ты прав. Я не сделал себя очень ясным: чтобы увидеть, существует ли StockGroup, вы можете попробовать это: 'if (centralData.product.StockGroup)' – lamelas

0

Поскольку JavaScript использует lazy evaluation, вы можете выполнить проверку, как это без ущерба для производительности:

if(centralData.product != null && centralData.product.StockGroup != null){ 

} 
+0

это не работает. Я попробовал пару минут назад. Странно, firefox может это понять, но не Chrome или IE. – AdrianoRR

+0

Покажите свой код, нет ничего плохого в этом, так что это должно быть что-то еще, что вы делаете ... – Jivings

4

Я полагаю, вы бы проверить, если свойство undefined вместо

if(typeof (centralData.product || {}).StockGroup) !== "undefined") { 
    /* do something */ 
} 

этот вид проверки was described on ajaxian сайт и общий код намного короче

+0

Интересное решение. – Jivings

+0

Действительно интересно. Это тоже работает, но я нахожу @ FB55 ответ более читабельным. – AdrianoRR

Смежные вопросы