检查JSON是否有嵌套对象

时间:2014-07-01 14:40:02

标签: javascript json

如何检查我的JSON中是否存在subproducts对象?

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

每当我使用if(product.subproducts)product.subproduct.name时,它都会让我返回true,而$.each(company.products, function (j, product) { if(product.hasOwnProperty('subproducts') { //do something } else { // do this } } 和{{1}}无法读取未定义的name属性。

{{1}}

更新:忘了说,对于每种产品,都包含或不包含副产品。

3 个答案:

答案 0 :(得分:1)

我想你应该试试这个:

products[0].hasOwnProperty('subproducts')

答案 1 :(得分:0)

看来,当你说副产品不存在时,它确实存在作为一个对象,但没有属性。在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
    }
}

答案 2 :(得分:-1)

您最好的选择是浏览对象并检查对象:

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

如果您有大型物品,那么这很糟糕,可能会减速

相关问题