检查密钥是否存在于json对象中


328
amt: "10.00"
email: "sam@gmail.com"
merchant_id: "sam"
mobileNo: "9874563210"
orderID: "123456"
passkey: "1234"

上面是我正在处理的JSON对象。我想检查'merchant_id'密钥是否存在。我尝试了以下代码,但无法正常工作。有什么办法实现呢?

<script>
window.onload = function getApp()
{
  var thisSession = JSON.parse('<?php echo json_encode($_POST); ?>');
  //console.log(thisSession);
  if (!("merchant_id" in thisSession)==0)
  {
    // do nothing.
  }
  else 
  {
    alert("yeah");
  }
}
</script>

输出是<?php echo json_encode($_POST); ?>什么?

它的输出是我在问题顶部显示的json对象
Ajeesh 2013年

1
输出是console.log(thisSession);什么?

1
另外,!("merchant_id" in thisSession)==0在可以简单使用的地方使用有什么好处"merchant_id" in thisSession

Answers:


585

尝试这个,

if(thisSession.hasOwnProperty('merchant_id')){

}

JS对象thisSession应该像

{
amt: "10.00",
email: "sam@gmail.com",
merchant_id: "sam",
mobileNo: "9874563210",
orderID: "123456",
passkey: "1234"
}

您可以在这里找到详细信息


6
对于熏陶,什么,如果有的话,之间的区别if(thisSession.merchant_id !== undefined),并if(thisSession.hasOwnProperty('merchant_id'))抑或是做幕后是一回事吗?
zero298 2013年

2
@ zero298,都是不一样的,使用hasOwnProperty是安全的......更多详细信息,请检查网络连接stackoverflow.com/questions/10895288/...
阿南德桑杰·贾

error Do not access Object.prototype method 'hasOwnProperty' from target object 使用此方法时,Eslint会引发错误。有什么想法吗?
hamncheez

2
@hamncheez如果JSON具有“ hasOwnProperty”字段,它将遮盖原始功能。使用Object.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

有多种方法可以完成此操作,具体取决于您的意图。

thisSession.hasOwnProperty('merchant_id'); 会告诉您thisSession本身是否具有该密钥(即不是它从其他地方继承来的)

"merchant_id" in thisSession 会告诉您thisSession是否具有密钥,无论它从何处获取。

thisSession["merchant_id"]如果键不存在,或者键的值由于任何原因(例如,它是文字false或整数0等)而返回false,则将返回false 。


2
thisSession [“ merchant_id”]将返回undefined而不是false。
p_champ '18

好的,然后“虚假”。
保罗

24

(即使我参加聚会的时间很晚,我也想指出这一点)
最初的问题实际上是您试图找到“ Not IN”的原因。我正在做的研究似乎不支持(下面2个链接)。

因此,如果您想执行“不参加”活动:

("merchant_id" in x)
true
("merchant_id_NotInObject" in x)
false 

我建议只将表达式==设置为您要查找的内容

if (("merchant_id" in thisSession)==false)
{
    // do nothing.
}
else 
{
    alert("yeah");
}

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/in http://www.w3schools.com/jsref/jsref_operators.asp


17

类型检查也可以:

if(typeof Obj.property == "undefined"){
    // Assign value to the property here
    Obj.property = someValue;
}

8

我会稍微更改您的if语句并起作用(也适用于继承的obj-在代码段中查看)

if(!("merchant_id" in thisSession)) alert("yeah");


7

您可以这样:

if("merchant_id" in thisSession){ /** will return true if exist */
 console.log('Exist!');
}

要么

if(thisSession["merchant_id"]){ /** will return its value if exist */
 console.log('Exist!');
}

0

检查未定义和空对象的函数

function elementCheck(objarray, callback) {
        var list_undefined = "";
        async.forEachOf(objarray, function (item, key, next_key) {
            console.log("item----->", item);
            console.log("key----->", key);
            if (item == undefined || item == '') {
                list_undefined = list_undefined + "" + key + "!!  ";
                next_key(null);
            } else {
                next_key(null);
            }
        }, function (next_key) {
            callback(list_undefined);
        })
    }

这是检查发送的对象是否包含未定义或null的简便方法

var objarray={
"passenger_id":"59b64a2ad328b62e41f9050d",
"started_ride":"1",
"bus_id":"59b8f920e6f7b87b855393ca",
"route_id":"59b1333c36a6c342e132f5d5",
"start_location":"",
"stop_location":""
}
elementCheck(objarray,function(list){
console.log("list");
)

-13

你可以试试 if(typeof object !== 'undefined')

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.