Javascript Json-检查子节点空值

Javascript Json-检查子节点空值,javascript,json,Javascript,Json,如何检查json对象的子属性是否为null?虽然firefox能识别,但Chrome和IE8却不能识别 我有一个json对象,如下所示: centralData.phone.id; centralData.address.id; centralData.product.id; //and many others 我想检查它的一些属性是否为空。我正在这样做,而且效果很好: if(centralData.phone != null){ //Do things } 但这不是,因为我并不总是有

如何检查json对象的子属性是否为null?虽然firefox能识别,但Chrome和IE8却不能识别

我有一个json对象,如下所示:

centralData.phone.id;
centralData.address.id;
centralData.product.id;
//and many others
我想检查它的一些属性是否为空。我正在这样做,而且效果很好:

if(centralData.phone != null){
   //Do things
}
但这不是,因为我并不总是有一个股票集团

if(centralData.product.StockGroup != null){
 //Error
}

那么,如何检查centralData.product.StockGroup是否为null?请尝试将对象与未定义的对象进行比较。

请尝试将对象与未定义的对象进行比较。

由于使用了JavaScript,您可以执行类似的检查,而不会影响性能:

if(centralData.product != null && centralData.product.StockGroup != null){

}
由于JavaScript使用,您可以在不影响性能的情况下执行如下检查:

if(centralData.product != null && centralData.product.StockGroup != null){

}

我想您应该检查属性是否是未定义的

if(typeof (centralData.product || {}).StockGroup) !== "undefined") {
   /* do something */
}

这种检查站点和总体代码要短得多

我想您应该检查属性是否为未定义的

if(typeof (centralData.product || {}).StockGroup) !== "undefined") {
   /* do something */
}

这种类型的检查站点和总体代码要短得多

您不想检查它是否为
null
,您想检查属性是否存在(在这种情况下,它将是
未定义的
)。您的检查之所以有效,是因为您使用的是
=
而不是
=
,后者在类型之间进行转换(
未定义==null
,但
未定义!==null

如果要检查嵌套特性,则需要检查每个级别。我建议在操作符中使用
,因为它会检查属性是否存在并忽略其值

这就是您想要做的:

if("product" in centralData && "StockGroup" in centralData.product){
    …
}

您不想检查它是否为
null
,而是想检查该属性是否存在(在这种情况下,它将是
未定义的
)。您的检查之所以有效,是因为您使用的是
=
而不是
=
,后者在类型之间进行转换(
未定义==null
,但
未定义!==null

如果要检查嵌套特性,则需要检查每个级别。我建议在
操作符中使用
,因为它会检查属性是否存在并忽略其值

这就是您想要做的:

if("product" in centralData && "StockGroup" in centralData.product){
    …
}


你到底想检查什么?吹毛求疵:你没有“JSON对象”。您有一个对象或JSON。后者是一种数据格式,只不过是一个字符串。我只是编辑了一下以使其更清晰。谢谢你指出这点。@Mörre我不知道它不是json对象。我猜我错了,因为java的类JSONObject。您必须这样检查:“if(centralData.product&¢ralData.product.StockGroup!=null)”这有点不方便,但是您必须单独检查路径的所有元素,而不仅仅是树结构的叶元素。更不用说你应该使用!==(或==)并明确是否要检查null或未定义。您到底想检查什么?吹毛求疵:您没有“JSON对象”。您有一个对象或JSON。后者是一种数据格式,只不过是一个字符串。我只是编辑了一下以使其更清晰。谢谢你指出这点。@Mörre我不知道它不是json对象。我猜我错了,因为java的类JSONObject。您必须这样检查:“if(centralData.product&¢ralData.product.StockGroup!=null)”这有点不方便,但是您必须单独检查路径的所有元素,而不仅仅是树结构的叶元素。更不用说你应该使用!==(或===)并清除是否要检查null或未定义。如
if(centralData.product.StockGroup!=“未定义”)
?这对任何情况都有效吗?我在网上看到过一些帖子,上面说“未定义”不是检查空对象的可靠方法。当然,“未定义”检查的是“未定义”而不是空对象。这就是为什么我在对Q的评论中说要清楚你检查的是什么。“undefined”表示“不(甚至)存在”,null确实存在并且确实有一个值,即“null”。非常不同。是的,你说得对。我没有说得很清楚:要想知道StockGroup是否存在,你可以试试这个:
if(centralData.product.StockGroup)
@Mörre谢谢你的解释,我不知道'undefined'和null之间的确切区别。比如
if(centralData.product.StockGroup!='undefined')
?这对任何情况都有效吗?我在网上看到过一些帖子,上面说“未定义”不是检查空对象的可靠方法。当然,“未定义”检查的是“未定义”而不是空对象。这就是为什么我在对Q的评论中说要清楚你检查的是什么。“undefined”表示“不(甚至)存在”,null确实存在并且确实有一个值,即“null”。非常不同。是的,你说得对。我没有说得很清楚:要想知道StockGroup是否存在,你可以试试这个:
if(centralData.product.StockGroup)
@Mörre谢谢你的解释,我不知道“undefined”和null之间的确切区别。这不起作用。我几分钟前试过了。奇怪的是,firefox可以理解它,但不能理解Chrome或iShow您的代码,这没有什么问题,所以它一定是您正在做的其他事情…这不起作用。我几分钟前试过了。奇怪的是,firefox可以理解它,但不能理解Chrome或iShow您的代码,这并没有什么问题,所以它一定是您正在做的其他事情…@FB55它工作了。但是,我必须初始化产品属性,否则我会得到一个
centralData.product不是一个对象
。谢谢。@FB55成功了。但是,我必须初始化产品属性,否则我会得到一个
centralData.product不是一个对象
。谢谢,真的很有趣。这也行得通,但我觉得@FB55-answer更具可读性。真的很有趣。这也很有效,但我发现@FB55-answer更具可读性。