2014-07-01 4 views
0

Как проверить, существует ли в моем JSON объект subproducts?Проверить JSON, если есть вложенный объект

"products":[ 
    { 
    "id":5002, 
    "description":"i dont know", 
    "position":1, 
    "weight":1, 
    "subproducts":{ 
      "name":"test", 
      "description":"description of test" 
     } 
    } 
], 

Он держит меня возвращает истину, когда я использую if(product.subproducts) и product.subproduct.name, которые не могут прочитать имя свойства не определено.

$.each(company.products, function (j, product) { 
    if(product.hasOwnProperty('subproducts') { 
     //do something   
    } else { 
     // do this 
    } 
} 

ОБНОВЛЕНО: забыли сообщить, что для каждого продукта содержатся субпродукты или нет.

+0

что вы получаете, когда вы войдете вывод '' 'TYPEOF (products.subproducts); '' '? – amenadiel

+0

это дает мне неопределенное. – fsi

+1

* «Это заставляет меня возвращать true всякий раз, когда я использую' if (product.subproducts) 'или' product.subproduct.name', который не может прочитать свойство имени undefined. "* Как вы можете получить' true', если код вызывает ошибку ? –

ответ

-1

Лучше бы пройти через объект и проверить объект:

function hasSubObject(products) { 
    for(var key in products){ 
     if(!products.hasOwnProperty(key))continue; 
     if(typeof products[key] === "object") return true; 
    } 
    return false; 
} 

Который является валовой и, вероятно, замедлится, если у вас есть большие объекты

1

Я думаю, вы должны попробовать это :

products[0].hasOwnProperty('subproducts')

+0

Вы правы. Продукты - это массив объектов. OP должен итерации, чтобы проверять каждый объект для ключа субпроизведения. – amenadiel

+2

OP уже делает это: 'if (product.hasOwnProperty ('subproducts') {' –

0

оказывается, что, когда вы говорите, субпродуктов не существует, она действительно существует как объект, а именно h нет свойств. Объект без свойств по-прежнему считается правдивым в JavaScript, поэтому он всегда передает ваше правдивое условие, а затем выдает неопределенную ошибку, если вы попытаетесь получить доступ к свойству name.

Пример:

var obj = {}; 
console.log(obj ? true : false); // true 

В этом случае вы можете проверить для name существующих:

$.each(company.products, function (j, product) { 
    if(product.hasOwnProperty('subproducts') { 
     if(product.subproducts.name){ 
      // it has subproducts AND the subproduct.name exists 
     }  
    } else { 
     // do this 
    } 
} 
Смежные вопросы