如何检查json中是否存在密钥

时间:2016-08-24 20:49:41

标签: javascript jquery json

我有JSON对象,我想检查在该JSON对象中设置的密钥

这是JSON对象

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18",
            "Child": [{
                "FromAge": "0",
                "ToAge": "12",
                "Price": "10"
            }]
        }
    }
}

如果您看到 Child 的JSON对象不存在,那么如何检查

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18"
        }
    }
}

我尝试了

if(Data_Array.Private.Price.Child[0].Price != "undefined"){
    ...
}

但是它显示了我的错误

  

未捕获的TypeError:无法读取属性

我无法知道该怎么做。

4 个答案:

答案 0 :(得分:8)

var json = {key1: 'value1', key2: 'value2'}

"key1" in json ? console.log('key exists') : console.log('unknown key')

"key3" in json ? console.log('key exists') : console.log('unknown key')

用于子键

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18",
            "Child": [{
                "FromAge": "0",
                "ToAge": "12",
                "Price": "10"
            }]
        }
    }
}

'Child' in Data_Array.Private.Price ? console.log('Child detected') : console.log('Child missing')

创建变量子

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18",
            "Child": [{
                "FromAge": "0",
                "ToAge": "12",
                "Price": "10"
            }]
        }
    }
}

var child = 'Child' in Data_Array.Private.Price && Data_Array.Private.Price.Child[0] || 'there is no child'

console.log(child)

如果没有孩子

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18"
        }
    }
}

var child = 'Child' in Data_Array.Private.Price && Data_Array.Private.Price.Child[0] || 'there is no child'

console.log(child)

答案 1 :(得分:1)

您可以将MSDN用于对象。

  

如果指定的属性位于指定的对象中, in 运算符将返回true

if ('Child' in Data_Array.Private.Price) {
    // more code
}

答案 2 :(得分:1)

尝试从未定义的对象获取属性将引发异常。您需要在整个链中检查每个属性是否存在(和类型)(除非您确定结构)。

使用Lodash:

if(_.has(Data_Array, 'Private.Price.Child')) {
    if(Array.isArray(Data_Array.Private.Price.Child) && Data_Array.Private.Price.Child.length && Data_Array.Private.Price.Child[0].Price) {
        // Its has a price!
    }
}

答案 3 :(得分:0)

检查Child是否未定义

if (typeof Data_Array.Private.Price.Child!== "undefined") {
    ...
}

或者您可以使用in

if ("Child" in Data_Array.Private.Price) {
    ...
}

或者您可以使用underscore.js的_.isUndefined(Data_Array.Private.Price.Child)