ตรวจสอบว่ามีกุญแจอยู่ในวัตถุ json หรือไม่


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

ด้านบนเป็นวัตถุ JSON ที่ฉันจัดการ ฉันต้องการตรวจสอบว่ามีรหัส 'commerce_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'))หรือมันทำสิ่งเดียวกันเบื้องหลัง
zero298

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' มันจะทำให้เกิดเงา func ดั้งเดิม ใช้Object.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

มีหลายวิธีขึ้นอยู่กับความตั้งใจของคุณ

thisSession.hasOwnProperty('merchant_id'); จะบอกคุณว่าช่วงเวลานี้มีคีย์ตัวเองหรือไม่ (ไม่ใช่สิ่งที่สืบทอดมาจากที่อื่น)

"merchant_id" in thisSession จะบอกคุณว่าช่วงเวลานี้มีกุญแจหรือไม่

thisSession["merchant_id"]จะคืนค่าเท็จหากคีย์ไม่มีอยู่หรือถ้าค่าของมันประเมินว่าเป็นเท็จด้วยเหตุผลใดก็ตาม (เช่นถ้าเป็นตัวอักษรfalseหรือจำนวนเต็ม 0 และอื่น ๆ )


2
thisSession ["พ่อค้า_id"] จะกลับมาไม่ได้กำหนดไม่ผิด
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 statement ของคุณเล็กน้อยและใช้งานได้ (สำหรับ 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");
)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.