Проверьте, существует ли ключ внутри объекта json

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

Выше приведен объект JSON, с которым я имею дело. Я хочу проверить, существует ли ключ 'merchant_id'. Я попробовал приведенный ниже код, но он не работает. Есть ли способ добиться этого?

<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>
Ажееш
источник
Какой выход <?php echo json_encode($_POST); ?>?
Daiwei
Его вывод - это то, что я показал в верхней части моего вопроса, объект json
Ajeesh
1
Какой выход console.log(thisSession);?
Daiwei
1
Кроме того, что является преимуществом использования, !("merchant_id" in thisSession)==0где вы можете просто использовать "merchant_id" in thisSession?
Daiwei
2
Возможный дубликат проверки наличия ключа в объекте JavaScript?
Андерсон Грин

Ответы:

585

Попробуй это,

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

}

объект JS thisSessionдолжен быть как

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

Вы можете найти детали здесь

Ананд Джа
источник
6
Для назидания, какие, если таковые имеются, разница между if(thisSession.merchant_id !== undefined)и if(thisSession.hasOwnProperty('merchant_id'))или он делает то же самое за кулисами?
ноль298
2
@ zero298, оба не одинаковы, использование hasOwnProperty безопасно ... подробнее смотрите на ссылке stackoverflow.com/questions/10895288/…
Anand Jha
Eslint выдает ошибку error Do not access Object.prototype method 'hasOwnProperty' from target object при использовании этого метода. Мысли?
Hamncheez
2
@hamncheez Если JSON имеет поле 'hasOwnProperty', он будет скрывать исходную функцию. ИспользованиеObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey
79

Есть несколько способов сделать это, в зависимости от ваших намерений.

thisSession.hasOwnProperty('merchant_id'); скажет вам, если этот сеанс имеет этот ключ сам (то есть не то, что он наследует из других мест)

"merchant_id" in thisSession скажет вам, если этот сеанс имеет ключ вообще, независимо от того, где он получил его.

thisSession["merchant_id"]вернет false, если ключ не существует или если его значение оценивается как false по любой причине (например, если это литерал falseили целое число 0 и т. д.).

Павел
источник
2
thisSession ["merchant_id"] вернет undefined, а не false.
p_champ
Хорошо, тогда "ложь".
Пол
25

(Я хотел указать на это, хотя я и опоздал на вечеринку)
Оригинальный вопрос, который вы пытались найти, по сути, «НЕ В». Похоже, это не подтверждается исследованиями (2 ссылки ниже), которые я проводил.

Так что, если вы хотите сделать «Не в»:

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

Я бы рекомендовал просто установить это выражение == на то, что вы ищете

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

Тип проверки также работает:

if(typeof Obj.property == "undefined"){
    // Assign value to the property here
    Obj.property = someValue;
}
Кайлас
источник
8

Я немного изменяю ваше заявление if и работает (также для унаследованного obj - посмотрите на фрагмент)

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

Камил Келчевски
источник
7

Вы можете сделать так:

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

или

if(thisSession["merchant_id"]){ /** will return its value if exist */
 console.log('Exist!');
}
code2heaven
источник
0

функция для проверки неопределенных и нулевых объектов

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

Вот простой способ проверить, содержит ли отправленный объект неопределенный или нулевой

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

Можешь попробовать if(typeof object !== 'undefined')

Zonger
источник