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'))아니면 배후에서 같은 일을하고 있습니까?
zero298

2
@ zero298, 둘 다 동일하지 않음, hasOwnProperty를 사용하는 것이 안전합니다 ... 자세한 내용은 stackoverflow.com/questions/10895288/…
Anand Jha

Eslint는 error Do not access Object.prototype method 'hasOwnProperty' from target object 이 방법을 사용할 때 오류를 발생시킵니다 . 생각?
hamncheez 2019

2
@hamncheez JSON에 'hasOwnProperty'필드가있는 경우 원래 기능을 음영 처리합니다. 사용Object.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

의도에 따라 여러 가지 방법이 있습니다.

thisSession.hasOwnProperty('merchant_id'); thisSession에 해당 키 자체가 있는지 여부를 알려줍니다 (즉, 다른 곳에서 상속 한 것이 아님).

"merchant_id" in thisSession 이 세션에 키가 있는지 여부를 알려줍니다.

thisSession["merchant_id"]키가 존재하지 않거나 어떤 이유로 든 값이 false로 평가되면 (예 : 리터럴 false또는 정수 0 등) false를 반환합니다 .


2
thisSession [ "merchant_id"]는 정의되지 않은 false를 반환합니다.
p_champ

좋아, "거짓"
Paul

25

(파티에 늦어도이 점을 지적하고 싶었습니다
.) 본질적으로 'Not IN'을 찾으려고 한 원래의 질문입니다. 내가하고있는 연구 (아래 2 링크)에서 지원되지 않는 것 같습니다.

따라서 'Not In'을하고 싶다면 :

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

정의되지 않은 개체와 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);
        })
    }

다음은 전송 된 객체에 정의되지 않았거나 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

당신은 시도 할 수 있습니다 if(typeof object !== 'undefined')

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.