JavaScript如何检查JSON中是否缺少某个属性?

4

我在寻找一种方法来检查已解析的JSON对象中是否存在属性。

例如,在我的JS代码中,我有这行代码:

jsonArray = JSON.parse(jsonResponse)

我想检查jsonArray对象中是否存在属性media

例如,如果我的JSON如下所示:

Object0 {hashtags: Array[0], 
         symbols: Array[0],
         user_mentions: Array[1], 
         urls: Array[0]}
Object1 {hashtags: Array[1], 
        symbols: Array[0], 
        user_mentions: Array[0],
        urls: Array[1], 
        media: Array[1]}

我想检查 Object0 是否有属性 media,以及 Object1 是否有属性 media。谢谢。
6个回答

8
你可以使用hasOwnProperty
if (Object0.hasOwnProperty('media')) {
    // Object0.media
}

文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

hasOwnProperty() 方法返回一个布尔值,表示对象是否具有指定的属性。从 Object 继承的每个对象都继承了 hasOwnProperty 方法。该方法可用于确定对象作为该对象的直接属性是否具有指定的属性;与 in 运算符不同,该方法不检查对象原型链。

说明:此方法用于判断对象是否具有指定的属性,而不会检查它的原型链。

3
这是更正确的答案,因为如果属性被明确设置为undefined会怎样呢? :) - AmmarCSE
@AmmarCSE JSON没有“undefined”的概念,因此这是不可能的。 - ssube

1

一旦您解析了JSON,它就变成了普通的JavaScript对象,您应该使用hasOwnProperty方法检查属性是否存在。

由于JSON对象没有像其他JS对象那样的属性或任何复杂的继承关系,所有存在的属性都将是它们自己的,并且通过hasOwnProperty检查返回true:

var data = '...';
var obj = JSON.parse(data);
if (obj.hasOwnProperty('foo')) {
  ...
}

0

使用typeof()检查是否为undefined

,例如:

if(typeof(Object0['media']) == 'undefined'){
}

0
如果您已经解析过它,那么它应该只是这样的。
jsonArray.media

或者

jsonArray["media"]

调用属性。如果你不需要获取属性,只是检查它,可以这样做:

jsonArray.media === 'undefined'

0
if(object0['media'] !== undefined){
//media property present
}else{
//media property not present
}

对于object1做同样的事情


如果值是空字符串(“”),0或false,则将其视为属性不存在。尽管所有这些都可以是属性的有效值。 - Chris Dutrow
@ChrisDutrow 你说得对,我已经修复了if检查,但是Tushar的方法是更好的检查方式。 - Himanshu Tanwar

0
来晚了,但我有同样的问题。以下是针对像我这样的初学者的答案:
如果语句测试的只是一个未定义的值,那么它与 false 相同。
下面的示例代码返回:
"yes animals"
"yes animals.dog"
"nope --- animals.dog.fleas"
    const animals = {
      dog: {
        name: 'Rover'
      }
    };
    
    if ( animals ) {
      console.log( "yes animals" );
    }
    
    if ( animals.dog ) {
      console.log( "yes animals.dog" );
    }
    
    if ( animals.dog.fleas ) {
      console.log( "yes animals.dog.fleas" )
    } else {
      console.log( "nope --- animals.dog.fleas" )
    }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接