检查 JSON 对象中是否存在密钥

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>
864580 次浏览

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

试试这个,

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


}

JS对象thisSession应该像

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

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

根据你的意图,有几种方法可以做到这一点。

thisSession.hasOwnProperty('merchant_id');将告诉你thisSession本身是否有该键(即不是它从其他地方继承的东西)

"merchant_id" in thisSession会告诉你这个session是否有键,不管它是从哪里得到的。

thisSession["merchant_id"]将返回false,如果键不存在,或者如果它的值因任何原因计算为false(例如,如果它是一个字面false或整数0等)。

类型检查也适用:

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

(我想指出这一点,即使我迟到了派对)
你最初的问题本质上是想找到一个“Not IN”。 这似乎没有得到我正在做的研究(下面2个链接)的支持。< / p >

所以如果你想做一个Not In

("merchant_id" in x)
true
("merchant_id_NotInObject" in x)
false
< p >我建议 只需将表达式==设置为您正在寻找的

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in http://www.w3schools.com/jsref/jsref_operators.asp < / p >

函数检查未定义和空对象

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);
})
}

这是一个简单的方法来检查对象发送是否包含未定义或空

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");
)

我稍微改变你的if语句和工作(也为继承的obj -看片段)

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

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


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




var sessionCfromA = Object.create(sessionA); // inheritance
sessionCfromA.name = 'john';




if (!("merchant_id" in sessionA)) alert("merchant_id not in sessionA");
if (!("merchant_id" in sessionB)) alert("merchant_id not in sessionB");
if (!("merchant_id" in sessionCfromA)) alert("merchant_id not in sessionCfromA");


if ("merchant_id" in sessionA) alert("merchant_id in sessionA");
if ("merchant_id" in sessionB) alert("merchant_id in sessionB");
if ("merchant_id" in sessionCfromA) alert("merchant_id in sessionCfromA");

你可以这样做:

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!');
}

这段代码导致esLint问题:no-prototype-builtins

foo.hasOwnProperty("bar")

在这里的建议方法是:

Object.prototype.hasOwnProperty.call(foo, "bar");