Bir json nesnesinin içinde bir anahtar olup olmadığını kontrol edin


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

Yukarıda ele aldığım JSON nesnesi. 'Merchant_id' anahtarının var olup olmadığını kontrol etmek istiyorum. Aşağıdaki kodu denedim, ama çalışmıyor. Bunu başarmanın bir yolu var mı?

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

Çıktısı nedir <?php echo json_encode($_POST); ?>?
Daiwei

Onun dışarı koymak sorum, json nesne
üstünde gösterdiğim şeydir

1
Çıktısı nedir console.log(thisSession);?
Daiwei

1
Ayrıca !("merchant_id" in thisSession)==0sadece kullanabileceğiniz yerlerde kullanmanın yararı "merchant_id" in thisSessionnedir?
Daiwei

Yanıtlar:


585

Bunu dene,

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

}

JS Nesnesi şöyle thisSessionolmalıdır

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

ayrıntıları burada bulabilirsiniz


6
Edification için, eğer varsa , perde arasındaki fark nedir if(thisSession.merchant_id !== undefined)ve / if(thisSession.hasOwnProperty('merchant_id'))veya aynı şeyi yapıyor?
zero298

2
@ zero298, ikisi de aynı değil, hasOwnProperty kullanmak güvenlidir ... daha fazla detay lütfen bağlantıyı kontrol edin stackoverflow.com/questions/10895288/…
Anand Jha

Eslint error Do not access Object.prototype method 'hasOwnProperty' from target object bu yöntemi kullanırken hatayı atar . Düşünceler?
hamncheez

2
@hamncheez JSON 'hasOwnProperty' alanına sahipse, orijinal işlevi gölgeleyecektir. KullanımObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

Niyetinize bağlı olarak bunu yapmanın birkaç yolu vardır.

thisSession.hasOwnProperty('merchant_id'); thisSession bu anahtarın kendisine sahip olup olmadığını söyleyecektir (başka bir yerden miras aldığı bir şey değil)

"merchant_id" in thisSession bu oturumun anahtarı nereden aldığından bağımsız olarak anahtarın olup olmadığını size söyleyecektir.

thisSession["merchant_id"]anahtar yoksa veya değeri herhangi bir nedenle false olarak değerlendirilirse false döndürür (örneğin, bir değişmez değer falseveya 0 tamsayısı vb.).


2
thisSession ["merchant_id"] undefined öğesini yanlış değil olarak döndürür.
p_champ

Tamam, o zaman "falsili".
Paul

25

(Partiye geç kalsam da bunu belirtmek istedim)
Esasen bir 'IN IN' bulmaya çalıştığınız orijinal soru. Yaptığım araştırmadan desteklenmiyor gibi görünüyor (aşağıdaki 2 bağlantı).

Eğer bir 'Değil' yapmak istiyorsanız:

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

Sadece bu ifadeyi == aradığınız şeye ayarlamanız önerilir

if (("merchant_id" in thisSession)==false)
{
    // do nothing.
}
else 
{
    alert("yeah");
}

https://developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/Operators/in http://www.w3schools.com/jsref/jsref_operators.asp


17

Tip kontrolü de çalışır:

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

8

İf ifadenizi biraz değiştiririm ve çalışırım (devralınan obj için de - snippet'e bakın)

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


7

bunu yapabilirsiniz:

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

veya

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

0

tanımlanmamış ve boş nesneleri denetleme işlevi

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

burada gönderilen nesnenin tanımsız veya boş olup olmadığını kontrol etmenin kolay bir yolu

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

Deneyebilirsin if(typeof object !== 'undefined')

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.