Sprawdź, czy klucz istnieje w obiekcie Json

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

Powyżej jest obiekt JSON, z którym mam do czynienia. Chcę sprawdzić, czy istnieje klucz „merchant_id”. Wypróbowałem poniższy kod, ale nie działa. Jest jakiś sposób na osiągnięcie tego?

<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
źródło
Jaka jest wydajność <?php echo json_encode($_POST); ?>?
Daiwei
Jest to, co pokazałem na początku mojego pytania, obiekt json
Ajeesh
1
Jaka jest wydajność console.log(thisSession);?
Daiwei,
1
Jaka jest korzyść z korzystania z tego, !("merchant_id" in thisSession)==0gdzie można po prostu użyć "merchant_id" in thisSession?
Daiwei,
2
Możliwy duplikat sprawdzania, czy klucz istnieje w obiekcie JavaScript?
Anderson Green,

Odpowiedzi:

585

Spróbuj tego,

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

}

obiekt JS thisSessionpowinien być podobny

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

szczegóły znajdziesz tutaj

Anand Jha
źródło
6
Jeśli chodzi o edycję, jaka jest ewentualna różnica pomiędzy if(thisSession.merchant_id !== undefined)i if(thisSession.hasOwnProperty('merchant_id'))czy robi to samo za kulisami?
zero298
2
@ zero298, oba nie są takie same, korzystanie z hasOwnProperty jest bezpieczne ... więcej szczegółów sprawdź link stackoverflow.com/questions/10895288/...
Anand Jha
Eslint zgłasza błąd error Do not access Object.prototype method 'hasOwnProperty' from target object podczas korzystania z tej metody. Myśli?
hamncheez
2
@hamncheez Jeśli JSON ma pole „hasOwnProperty”, spowoduje przesłanie oryginalnego func. UżyjObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey,
79

Można to zrobić na kilka sposobów, w zależności od intencji.

thisSession.hasOwnProperty('merchant_id'); powie ci, czy ta sesja ma sam ten klucz (tj. nie jest czymś, co dziedziczy z innego miejsca)

"merchant_id" in thisSession powie ci, czy ta sesja w ogóle ma klucz, niezależnie od tego, skąd go ma.

thisSession["merchant_id"]zwróci false, jeśli klucz nie istnieje lub jeśli jego wartość z jakiegokolwiek powodu zostanie zmieniona na false (np. jeśli jest to literał falselub liczba całkowita 0 i tak dalej).

Paweł
źródło
2
thisSession [„merchant_id”] zwróci niezdefiniowany, a nie fałszywy.
p_champ
Ok, więc „fałsz”.
Paul
25

(Chciałem to podkreślić, mimo że jestem spóźniony na imprezę)
. Pierwotne pytanie, które próbowaliście znaleźć w zasadzie „NIE IN”. Wygląda na to, że nie jest obsługiwany w badaniach (2 linki poniżej), które przeprowadzałem.

Więc jeśli chcesz zrobić „Not In”:

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

Polecam ustawienie tego wyrażenia == na to, czego szukasz

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
źródło
17

Sprawdzanie typu działa również:

if(typeof Obj.property == "undefined"){
    // Assign value to the property here
    Obj.property = someValue;
}
Kailas
źródło
8

Lekko zmieniam instrukcję if i działa (także dla dziedziczonych obiektów - spójrz na fragment)

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

Kamil Kiełczewski
źródło
7

możesz zrobić tak:

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

lub

if(thisSession["merchant_id"]){ /** will return its value if exist */
 console.log('Exist!');
}
code2heaven
źródło
0

funkcja do sprawdzania niezdefiniowanych i pustych obiektów

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

tutaj jest prosty sposób, aby sprawdzić, czy wysłany obiekt zawiera niezdefiniowany lub zerowy

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
źródło
-13

Możesz spróbować if(typeof object !== 'undefined')

Zonger
źródło