Periksa apakah ada kunci di dalam objek json

329
amt: "10.00"
email: "[email protected]"
merchant_id: "sam"
mobileNo: "9874563210"
orderID: "123456"
passkey: "1234"

Di atas adalah objek JSON yang saya hadapi. Saya ingin memeriksa apakah kunci 'merchant_id' ada. Saya mencoba kode di bawah ini, tetapi tidak berfungsi. Adakah cara untuk mencapainya?

<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>
Ajeesh
sumber
Apa output dari <?php echo json_encode($_POST); ?>?
Daiwei
Hasil akhirnya adalah apa yang telah saya perlihatkan di bagian atas pertanyaan saya, objek json
Ajeesh
1
Apa output dari console.log(thisSession);?
Daiwei
1
Juga apa manfaat menggunakan di !("merchant_id" in thisSession)==0mana Anda bisa menggunakan "merchant_id" in thisSession?
Daiwei
2
Kemungkinan duplikat Memeriksa apakah kunci ada di objek JavaScript?
Anderson Green

Jawaban:

585

Coba ini,

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

}

Objek JS thisSessionharus seperti

{
amt: "10.00",
email: "[email protected]",
merchant_id: "sam",
mobileNo: "9874563210",
orderID: "123456",
passkey: "1234"
}

Anda dapat menemukan detailnya di sini

Anand Jha
sumber
6
Untuk peneguhan, apa, jika ada, perbedaan antara if(thisSession.merchant_id !== undefined)dan if(thisSession.hasOwnProperty('merchant_id'))atau apakah itu melakukan hal yang sama di belakang layar?
zero298
2
@ zero298, keduanya tidak sama, menggunakan hasOwnProperty aman ... lebih lebih detail silahkan cek link stackoverflow.com/questions/10895288/...
Anand Jha
Eslint melempar kesalahan error Do not access Object.prototype method 'hasOwnProperty' from target object saat menggunakan metode ini. Pikiran?
hamncheez
2
@hamncheez Jika JSON memiliki bidang 'hasOwnProperty', itu akan membayangi func asli. GunakanObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey
79

Ada beberapa cara untuk melakukannya, tergantung pada niat Anda.

thisSession.hasOwnProperty('merchant_id'); akan memberi tahu Anda jika sesi ini memiliki kunci itu sendiri (yaitu bukan sesuatu yang diwarisi dari tempat lain)

"merchant_id" in thisSession akan memberi tahu Anda jika sesi ini memiliki kunci sama sekali, terlepas dari mana mendapatkannya.

thisSession["merchant_id"]akan mengembalikan false jika kunci tidak ada, atau jika nilainya dievaluasi menjadi salah karena alasan apa pun (misalnya jika itu literal falseatau bilangan bulat 0 dan seterusnya).

Paul
sumber
2
sesi ini ["merchant_id"] akan mengembalikan yang tidak ditentukan, bukan salah.
p_champ
Ok, "falsy" kalau begitu.
Paul
25

(Saya ingin menunjukkan ini meskipun saya terlambat ke pesta)
. Pertanyaan awal yang Anda coba cari adalah 'TIDAK DI' pada dasarnya. Sepertinya tidak didukung dari penelitian (2 tautan di bawah) yang saya lakukan.

Jadi, jika Anda ingin melakukan 'Tidak Masuk':

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

Saya sarankan hanya mengatur ekspresi itu == untuk apa yang Anda cari

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

Sam
sumber
17

Jenis cek juga berfungsi:

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

Saya mengubah pernyataan if Anda sedikit dan berfungsi (juga untuk objek bawaan - lihat di cuplikan)

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

Kamil Kiełczewski
sumber
7

Anda bisa melakukan ini:

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

atau

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

berfungsi untuk memeriksa objek yang tidak terdefinisi dan null

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

di sini adalah cara mudah untuk memeriksa apakah objek yang dikirim berisi tidak terdefinisi atau nol

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");
)
sai sanath
sumber
-13

Anda dapat mencoba if(typeof object !== 'undefined')

Zonger
sumber