Überprüfen Sie, ob in einem JSON-Objekt ein Schlüssel vorhanden ist

327
amt: "10.00"
email: "[email protected]"
merchant_id: "sam"
mobileNo: "9874563210"
orderID: "123456"
passkey: "1234"

Das Obige ist das JSON-Objekt, mit dem ich mich befasse. Ich möchte überprüfen, ob der Schlüssel 'Merchant_id' vorhanden ist. Ich habe den folgenden Code ausprobiert, aber er funktioniert nicht. Wie kann man das erreichen?

<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>
Ajeesh
quelle
Was ist die Ausgabe von <?php echo json_encode($_POST); ?>?
Daiwei
Seine
Ausgabe
1
Was ist die Ausgabe von console.log(thisSession);?
Daiwei
1
Was ist auch der Vorteil einer Verwendung, !("merchant_id" in thisSession)==0bei der Sie einfach verwenden können "merchant_id" in thisSession?
Daiwei

Antworten:

585

Versuche dies,

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

}

Das JS-Objekt thisSessionsollte wie folgt sein

{
amt: "10.00",
email: "[email protected]",
merchant_id: "sam",
mobileNo: "9874563210",
orderID: "123456",
passkey: "1234"
}

Details finden Sie hier

Anand Jha
quelle
6
Was ist, wenn überhaupt, der Unterschied zwischen if(thisSession.merchant_id !== undefined)und if(thisSession.hasOwnProperty('merchant_id'))oder macht es dasselbe hinter den Kulissen?
Null298
2
@ zero298, beide sind nicht gleich, die Verwendung von hasOwnProperty ist sicher ... Weitere Details finden Sie unter dem Link stackoverflow.com/questions/10895288/…
Anand Jha
Eslint gibt den Fehler aus, error Do not access Object.prototype method 'hasOwnProperty' from target object wenn diese Methode verwendet wird. Gedanken?
Hamncheez
2
@hamncheez Wenn JSON über das Feld 'hasOwnProperty' verfügt, wird die ursprüngliche Funktion schattiert. Verwenden SieObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey
79

Abhängig von Ihrer Absicht gibt es verschiedene Möglichkeiten.

thisSession.hasOwnProperty('merchant_id'); wird Ihnen sagen, ob diese Sitzung diesen Schlüssel selbst hat (dh nicht etwas, das sie von anderswo erbt)

"merchant_id" in thisSession Ich werde Ihnen sagen, ob diese Sitzung überhaupt den Schlüssel hat, unabhängig davon, woher er stammt.

thisSession["merchant_id"]gibt false zurück, wenn der Schlüssel nicht vorhanden ist oder wenn sein Wert aus irgendeinem Grund als false ausgewertet wird (z. B. wenn es sich um ein Literal falseoder die Ganzzahl 0 usw. handelt).

Paul
quelle
1
thisSession ["Merchant_id"] gibt undefined not false zurück.
p_champ
Ok, dann "falsch".
Paul
24

(Ich wollte darauf hinweisen, obwohl ich zu spät zur Party komme.)
Die ursprüngliche Frage, die Sie versuchten, im Wesentlichen ein "Nicht IN" zu finden. Es sieht so aus, als würde die von mir durchgeführte Recherche (2 Links unten) nicht unterstützt.

Wenn Sie also ein "Not In" machen wollten:

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

Ich würde empfehlen, nur diesen Ausdruck == auf das zu setzen, wonach Sie suchen

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

Sam
quelle
17

Die Typprüfung funktioniert auch:

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

Ich ändere deine if-Anweisung leicht und funktioniert (auch für geerbtes Objekt - siehe Snippet)

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

Kamil Kiełczewski
quelle
7

Sie können dies tun:

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

oder

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

Funktion zum Überprüfen von undefinierten und Null-Objekten

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

Hier können Sie auf einfache Weise überprüfen, ob das gesendete Objekt undefiniert oder null enthält

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");
)
Sai Sanath
quelle
-13

Du kannst es versuchen if(typeof object !== 'undefined')

Zonger
quelle