Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查json中是否存在密钥_Javascript_Jquery_Json - Fatal编程技术网

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

Javascript 如何检查json中是否存在密钥,javascript,jquery,json,Javascript,Jquery,Json,我有一个JSON对象,我想检查该JSON对象中是否设置了密钥 这里是JSON对象 var Data_Array = { "Private": { "Price": { "Adult": "18", "Child": [{ "FromAge": "0", "ToAge": "12", "Price": "10"

我有一个JSON对象,我想检查该JSON对象中是否设置了密钥

这里是JSON对象

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18",
            "Child": [{
                "FromAge": "0",
                "ToAge": "12",
                "Price": "10"
            }]
        }
    }
}
如果像您看到的子对象那样的JSON对象不存在,那么如何检查它

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18"
        }
    }
}
我已经试过了

但它向我显示了这个错误

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


我不知道该怎么办

检查子项是否未定义

if (typeof Data_Array.Private.Price.Child!== "undefined") {
    ...
}
或者您可以在中使用

if ("Child" in Data_Array.Private.Price) {
    ...
}
或者您可以使用underline.js的
.isUndefined(Data\u Array.Private.Price.Child)
您可以将

如果指定的属性在指定的对象中,则
中的
运算符返回
true

var json={key1:'value1',key2:'value2'}
json中的“key1”?console.log('key exists'):console.log('unknown key')

json中的“key3”?console.log('key exists'):console.log('unknown key')
尝试从未定义的对象获取属性将引发异常。您需要检查整个链中每个属性是否存在(和类型)(除非您确定结构)

使用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!
    }
}

Data\u Array.Private.Price.hasOwnProperty(“Child”)
FYI:您没有“JSON对象”。这是一个广泛的误称。代表“Javascript对象表示法”。因此任何有效的JSON都是有效的Javascript。你所拥有的是一个物体。JSON是一种文本格式。另请参见@MikeC,我同意你的话,并牢记在心,非常感谢你提供的信息。如果
Private
不是propertyright,将抛出异常,但是问题是关于要测试的
Child
。我只是想告诉大家,因为OP似乎不明白为什么会出现这些异常。这很好,但是你能帮我看看它是如何工作的
var Child='Child'在Data_Array.Private.Price&&Data_Array.Private.Price.Child[0]|'没有孩子'
VS
var Child='Child'在(Data_Array.Private.Price&&Data_Array.Private.Price.Child[0])?Data_Array.Private.Price.Child[0]:“在表达式var a=b&&c|d中没有子项”
如果b为真,则返回c并跳过d,因此a=c,或者如果b为假,则跳过c并返回d,因此a=dGreat!,这是很好的解释。
if ('Child' in Data_Array.Private.Price) {
    // more code
}
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!
    }
}