jsonオブジェクト内にキーが存在するかどうかを確認します


329
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); ?>何ですか?
ダイウェイ2013

そのアウトプットは、私は、私の質問の上部にJSONオブジェクトを示したものである
アジーッシュ

1
の出力はconsole.log(thisSession);何ですか?
ダイウェイ2013

1
また、!("merchant_id" in thisSession)==0単純に使用できる場所を使用する利点は何"merchant_id" in thisSessionですか?
ダイウェイ2013

回答:


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 2013

2
zero298 @、同じではありません両方、hasOwnPropertyをを使用しても安全です...もっと詳細リンクチェックしてくださいstackoverflow.com/questions/10895288/...を
アナンドJhaは

error Do not access Object.prototype method 'hasOwnProperty' from target object このメソッドを使用すると、Eslintはエラーをスローします。考え?
hamncheez

2
@hamncheez JSONに「hasOwnProperty」フィールドがある場合、元の関数をシャドウします。使用Object.prototype.hasOwnProperty.call(thisSession, 'merchant_id')
Zmey

79

目的に応じて、いくつかの方法があります。

thisSession.hasOwnProperty('merchant_id'); thisSessionにそのキー自体があるかどうか(つまり、他の場所から継承されているものではないかどうか)

"merchant_id" in thisSession 取得した場所に関係なく、thisSessionにキーがあるかどうかがわかります。

thisSession["merchant_id"]キーが存在しない場合、またはその値が何らかの理由(リテラルfalseまたは整数0など)でfalseと評価された場合は、falseを返します。


2
thisSession ["merchant_id"]はfalseではなくundefinedを返します。
p_champ 2018年

じゃあ、じゃあ「じゃあ」。
ポール、

25

(私はパーティーに遅れているのにこれを指摘したかった)
あなたが本質的に 'IN 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");
)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.