Controlla se esiste una chiave all'interno di un oggetto json


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

Quanto sopra è l'oggetto JSON con cui ho a che fare. Voglio verificare se esiste la chiave "merchant_id". Ho provato il codice qui sotto, ma non funziona. Qualche modo per raggiungerlo?

<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>

Qual è l'output di <?php echo json_encode($_POST); ?>?
Daiwei,

Il risultato è quello che ho mostrato in cima alla mia domanda, l'oggetto json
Ajeesh,

1
Qual è l'output di console.log(thisSession);?
Daiwei,

1
Inoltre, qual è il vantaggio di usare !("merchant_id" in thisSession)==0dove puoi semplicemente usare "merchant_id" in thisSession?
Daiwei,

Risposte:


585

Prova questo,

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

}

l'oggetto JS thisSessiondovrebbe essere simile

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

puoi trovare i dettagli qui


6
Per l'edificazione, che cosa, se del caso, è la differenza tra if(thisSession.merchant_id !== undefined)e if(thisSession.hasOwnProperty('merchant_id'))o sta facendo la stessa cosa dietro le quinte?
zero298,

2
@ zero298, entrambi non sono uguali, l'utilizzo di hasOwnProperty è sicuro ... maggiori dettagli, controlla il link stackoverflow.com/questions/10895288/…
Anand Jha,

Eslint genera l'errore error Do not access Object.prototype method 'hasOwnProperty' from target object quando si utilizza questo metodo. Pensieri?
hamncheez,

2
@hamncheez Se JSON ha il campo 'hasOwnProperty', ombreggerà la funzione originale. UsaObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey il

79

Esistono diversi modi per farlo, a seconda delle tue intenzioni.

thisSession.hasOwnProperty('merchant_id'); ti dirà se thisSession ha quella chiave stessa (cioè non qualcosa che eredita da altrove)

"merchant_id" in thisSession ti dirà se thisSession ha la chiave, indipendentemente da dove sia stata trovata.

thisSession["merchant_id"]restituirà false se la chiave non esiste o se il suo valore viene considerato false per qualsiasi motivo (ad es. se è un valore letterale falseo intero 0 e così via).


2
thisSession ["merchant_id"] restituirà undefined non false.
p_champ,

Ok, "falsa" allora.
Paul

25

(Volevo sottolineare questo, anche se sono in ritardo alla festa)
La domanda originale che stavi cercando di trovare un 'Non IN' essenzialmente. Sembra che non sia supportato dalla ricerca (2 link sotto) che stavo facendo.

Quindi, se volevi fare un 'Not In':

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

Consiglierei di impostare quell'espressione == su quello che stai cercando

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


17

Il controllo del tipo funziona anche:

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

8

Modifico leggermente la tua istruzione if e funziona (anche per l'obj ereditato - guarda sullo snippet)

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


7

puoi fare così:

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

o

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

0

funzione per controllare oggetti non definiti e null

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

ecco un modo semplice per verificare se l'oggetto inviato contiene undefined o 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

Puoi provare if(typeof object !== 'undefined')

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.