Verifique se existe uma chave dentro de um objeto json


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

O texto acima é o objeto JSON com o qual estou lidando. Quero verificar se a chave 'merchant_id' existe. Eu tentei o código abaixo, mas não está funcionando. Alguma maneira de conseguir isso?

<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 é a saída de <?php echo json_encode($_POST); ?>?
Daiwei

Seu posto para fora é o que tenho mostrado no topo da minha pergunta, o objeto json
ajeesh

1
Qual é a saída de console.log(thisSession);?
Daiwei

1
Além disso, qual é o benefício de usar !("merchant_id" in thisSession)==0onde você pode simplesmente usar "merchant_id" in thisSession?
Daiwei

Respostas:


585

Tente isso,

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

}

o objeto JS thisSessiondeve ser como

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

você pode encontrar os detalhes aqui


6
Para edificação, o que, se houver, é a diferença entre if(thisSession.merchant_id !== undefined)e if(thisSession.hasOwnProperty('merchant_id'))ou está fazendo a mesma coisa nos bastidores?
zero298

2
@ zero298, ambos não são iguais, usar hasOwnProperty é seguro ... mais detalhes, por favor verifique o link stackoverflow.com/questions/10895288/…
Anand Jha

Eslint lança o erro error Do not access Object.prototype method 'hasOwnProperty' from target object ao usar este método. Pensamentos?
21719 hamncheez

2
@hamncheez Se o JSON tiver o campo 'hasOwnProperty', ele sombreará a função original. UseObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

Existem várias maneiras de fazer isso, dependendo da sua intenção.

thisSession.hasOwnProperty('merchant_id'); dirá se esta sessão possui essa chave em si (ou seja, não é algo que ela herda de outro lugar)

"merchant_id" in thisSession dirá se esta sessão tem a chave, independentemente de onde ela foi obtida.

thisSession["merchant_id"]retornará false se a chave não existir ou se seu valor for avaliado como false por qualquer motivo (por exemplo, se for um literal falseou o número inteiro 0 e assim por diante).


2
thisSession ["merchant_id"] retornará indefinido, não falso.
P_champ

Ok, "falsy" então.
Paul

25

(Eu queria salientar isso mesmo que eu esteja atrasado para a festa)
A pergunta original que você estava tentando encontrar essencialmente 'Não está dentro'. Parece que não há suporte na pesquisa (2 links abaixo) que eu estava fazendo.

Então, se você quiser fazer um 'Not In':

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

Eu recomendo apenas definir essa expressão == para o que você está procurando

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

A verificação de tipo também funciona:

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

8

Eu mudo sua instrução if levemente e funciona (também para objetos herdados - veja no snippet)

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


7

você pode fazer assim:

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

0

função para verificar objetos nulos e indefinidos

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

aqui está uma maneira fácil de verificar se o objeto enviado contém indefinido ou nulo

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

Podes tentar if(typeof object !== 'undefined')

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.