Kiểm tra nếu một khóa tồn tại bên trong một đối tượng json


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

Trên đây là đối tượng JSON mà tôi đang xử lý. Tôi muốn kiểm tra xem khóa 'merchant_id' có tồn tại không. Tôi đã thử mã dưới đây, nhưng nó không hoạt động. Bất kỳ cách nào để đạt được nó?

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

Đầu ra của là <?php echo json_encode($_POST); ?>gì?
Daiwei

Nó đặt ra là những gì tôi đã thể hiện ở đầu câu hỏi của tôi, đối tượng json
Ajeesh 27/12/13

1
Đầu ra của là console.log(thisSession);gì?
Daiwei

1
Ngoài ra lợi ích của việc sử dụng !("merchant_id" in thisSession)==0ở đâu bạn chỉ có thể sử dụng là "merchant_id" in thisSessiongì?
Daiwei

Câu trả lời:


585

Thử cái này,

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

}

Đối tượng JS thisSessionphải giống như

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

bạn có thể tìm thấy các chi tiết ở đây


6
Đối với chỉnh sửa, điều gì, nếu có, là sự khác biệt giữa if(thisSession.merchant_id !== undefined)if(thisSession.hasOwnProperty('merchant_id'))hoặc nó đang làm điều tương tự đằng sau hậu trường?
zero298

2
@ zero298, cả hai đều không giống nhau, sử dụng hasOwnProperty là an toàn ... để biết thêm chi tiết, vui lòng kiểm tra liên kết stackoverflow.com/questions/10895288/
Anand Jha

Eslint ném lỗi error Do not access Object.prototype method 'hasOwnProperty' from target object khi sử dụng phương pháp này. Suy nghĩ?
hamncheez

2
@hamncheez Nếu JSON có trường 'hasOwnProperty', nó sẽ phủ bóng func ban đầu. Sử dụngObject.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

Có một số cách để làm điều đó, tùy thuộc vào ý định của bạn.

thisSession.hasOwnProperty('merchant_id'); sẽ cho bạn biết nếu thisSession có khóa đó (tức là không phải thứ gì đó được thừa hưởng từ nơi khác)

"merchant_id" in thisSession sẽ cho bạn biết nếu thisSession có chìa khóa nào, bất kể nó lấy ở đâu.

thisSession["merchant_id"]sẽ trả về false nếu khóa không tồn tại hoặc nếu giá trị của nó ước tính thành false vì bất kỳ lý do nào (ví dụ: nếu đó là bằng chữ falsehoặc số nguyên 0, v.v.).


2
thisSession ["merchant_id"] sẽ trả về không xác định không sai.
p_champ

Ok, "giả" rồi.
Paul

25

(Tôi muốn chỉ ra điều này mặc dù tôi đến bữa tiệc muộn)
Câu hỏi ban đầu mà bạn đang cố gắng tìm một 'Không IN' về cơ bản. Có vẻ như không được hỗ trợ từ nghiên cứu (2 liên kết dưới đây) mà tôi đang làm.

Vì vậy, nếu bạn muốn làm một 'Không trong':

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

Tôi khuyên bạn chỉ nên đặt biểu thức đó == cho những gì bạn đang tìm kiếm

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

Kiểm tra loại cũng hoạt động:

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

8

Tôi thay đổi câu lệnh if của bạn một chút và hoạt động (cũng cho obj được kế thừa - nhìn vào đoạn trích)

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


7

bạn có thể làm như thế này:

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

hoặc là

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

0

chức năng kiểm tra các đối tượng không xác định và 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);
        })
    }

Đây là một cách dễ dàng để kiểm tra xem đối tượng được gửi có chứa không xác định hoặc null

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

Bạn co thể thử if(typeof object !== 'undefined')

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.