Compruebe si existe una clave dentro de un objeto json


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

Lo anterior es el objeto JSON con el que estoy tratando. Quiero verificar si existe la clave 'merchant_id'. Intenté el siguiente código, pero no funciona. ¿Alguna forma de lograrlo?

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

¿Cuál es la salida de <?php echo json_encode($_POST); ?>?
Daiwei

Su salida es lo que he mostrado en la parte superior de mi pregunta, el objeto json
Ajeesh

1
¿Cuál es la salida de console.log(thisSession);?
Daiwei

1
Además, ¿cuál es el beneficio de usar !("merchant_id" in thisSession)==0donde simplemente puede usar "merchant_id" in thisSession?
Daiwei

Respuestas:


585

Prueba esto,

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

}

el objeto JS thisSessiondebería ser como

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

puedes encontrar los detalles aquí


66
Para la edificación, lo que, en su caso, es la diferencia entre if(thisSession.merchant_id !== undefined)y if(thisSession.hasOwnProperty('merchant_id'))o está haciendo lo mismo detrás de las escenas?
zero298

2
@ zero298, ambos no son lo mismo, el uso de hasOwnProperty es seguro ... más detalles, consulte el enlace stackoverflow.com/questions/10895288/…
Anand Jha

Eslint arroja el error error Do not access Object.prototype method 'hasOwnProperty' from target object al usar este método. Pensamientos?
hamncheez

2
@hamncheez Si JSON tiene el campo 'hasOwnProperty', sombreará la función original. UsoObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

Hay varias formas de hacerlo, dependiendo de su intención.

thisSession.hasOwnProperty('merchant_id'); le dirá si thisSession tiene esa clave en sí (es decir, no es algo que hereda de otro lugar)

"merchant_id" in thisSession le dirá si esta sesión tiene la clave, independientemente de dónde la haya obtenido.

thisSession["merchant_id"]devolverá falso si la clave no existe, o si su valor se evalúa como falso por algún motivo (por ejemplo, si es un literal falseo el entero 0, etc.).


2
thisSession ["merchant_id"] devolverá indefinido, no falso.
p_champ

Ok, "falsedad" entonces.
Paul

25

(Quería señalar esto a pesar de que llego tarde a la fiesta)
La pregunta original que estabas tratando de encontrar un 'No IN' esencialmente. Parece que no es compatible con la investigación (2 enlaces a continuación) que estaba haciendo.

Entonces, si quisieras hacer un 'No en':

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

Recomiendo simplemente configurar esa expresión == a lo que estás buscando

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

La verificación de tipo también funciona:

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

8

Modifico un poco tu sentencia if y funciona (también para obj heredado - mira el fragmento)

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


7

puedes hacer así:

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

función para verificar objetos indefinidos y nulos

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

Aquí hay una manera fácil de verificar si el objeto enviado contiene valores indefinidos o nulos

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

Puedes probar if(typeof object !== 'undefined')

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.