Vérifier si une clé existe à l'intérieur d'un objet json

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

Ce qui précède est l'objet JSON que je traite. Je veux vérifier si la clé 'merchant_id' existe. J'ai essayé le code ci-dessous, mais cela ne fonctionne pas. Une façon de le réaliser?

<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
la source
Quelle est la sortie de <?php echo json_encode($_POST); ?>?
Daiwei
Son résultat est ce que j'ai montré en haut de ma question, l'objet json
Ajeesh
1
Quelle est la sortie de console.log(thisSession);?
Daiwei
1
Quel est également l'avantage d'utiliser !("merchant_id" in thisSession)==0où vous pouvez simplement utiliser "merchant_id" in thisSession?
Daiwei

Réponses:

585

Essaye ça,

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

}

l'objet JS thisSessiondevrait être comme

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

vous pouvez trouver les détails ici

Anand Jha
la source
6
Pour l'édification, quelle est, le cas échéant, la différence entre if(thisSession.merchant_id !== undefined)et if(thisSession.hasOwnProperty('merchant_id'))ou fait-elle la même chose dans les coulisses?
zero298
2
@ zero298, les deux ne sont pas les mêmes, l'utilisation de hasOwnProperty est sûre ... plus de détails s'il vous plaît vérifier le lien stackoverflow.com/questions/10895288/…
Anand Jha
Eslint renvoie l'erreur error Do not access Object.prototype method 'hasOwnProperty' from target object lors de l'utilisation de cette méthode. Pensées?
hamncheez
2
@hamncheez Si JSON a le champ 'hasOwnProperty', il masquera la fonction d'origine. UtilisationObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey
79

Il existe plusieurs façons de le faire, selon votre intention.

thisSession.hasOwnProperty('merchant_id'); vous dira si cette session a cette clé elle-même (c'est-à-dire pas quelque chose dont elle hérite d'ailleurs)

"merchant_id" in thisSession vous dira si cette session a la clé, peu importe où elle l'a obtenue.

thisSession["merchant_id"]retournera false si la clé n'existe pas, ou si sa valeur est évaluée à false pour une raison quelconque (par exemple, s'il s'agit d'un littéral falseou de l'entier 0, etc.).

Paul
la source
2
thisSession ["merchant_id"] renverra undefined non false.
p_champ
Ok, "falsy" alors.
Paul
25

(Je voulais souligner cela même si je suis en retard à la fête)
La question d'origine, vous essayiez de trouver un «Not IN» essentiellement. Il semble que ce ne soit pas pris en charge par la recherche (2 liens ci-dessous) que je faisais.

Donc, si vous vouliez faire un «pas dedans»:

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

Je recommanderais simplement de définir cette expression == sur ce que vous recherchez

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
la source
17

La vérification de type fonctionne également:

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

Je modifie légèrement votre instruction if et fonctionne (également pour obj hérité - regardez l'extrait)

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

Kamil Kiełczewski
la source
7

vous pouvez faire comme ça:

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

ou

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

fonction pour vérifier les objets non définis et nuls

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

voici un moyen facile de vérifier si l'objet envoyé est non défini ou nul

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
la source
-13

Tu peux essayer if(typeof object !== 'undefined')

Zonger
la source