Перевірте, чи існує ключ усередині об’єкта json


328
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

Відповіді:


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')
Змей

79

Існує кілька способів зробити це, залежно від вашого наміру.

thisSession.hasOwnProperty('merchant_id'); підкаже, чи має цей сеанс той ключ (тобто не те, що він успадковує з інших місць)

"merchant_id" in thisSession підкаже, чи має цей сеанс ключ, незалежно від того, де він його отримав.

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


2
thisSession ["merchant_id"] поверне невизначений, а не хибний.
p_champ

Гаразд, "фальшивий" тоді.
Пол

25

(Я хотів це зазначити, хоча я запізнююся на вечірку)
Оригінальне запитання, яке ви намагалися знайти по суті "Not IN". Схоже, це не підтримується дослідженнями (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!');
}

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.