Javascript 如何检查json中是否存在密钥
我有一个JSON对象,我想检查该JSON对象中是否设置了密钥 这里是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"
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]|'没有孩子'
VSvar 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!
}
}