2012-04-18 2 views
1

jsonオブジェクトの子属性がnullであるかどうかを確認するにはどうすればよいですか? Firefoxはそれを認識しますが、ChromeとIE 8では認識しません。Json - 子ノードのヌル値を確認する

私はこのようなJSONオブジェクトがあります。

centralData.phone.id; 
centralData.address.id; 
centralData.product.id; 
//and many others 

を、私はそれの属性のいくつかがnullであるかもしれないかどうかを確認したいと思います。私はこれをやっているし、それが動作します:それは常にではありませんので、私はcentralData.product.StockGroupがnullであるかどうかを確認することができますどのように、私はStockGroupので

if(centralData.product.StockGroup != null){ 
//Error 
} 

を持って、

if(centralData.phone != null){ 
    //Do things 
} 

しかし、これではないのですか?

+0

あなたが正確に確認するために何をしようとしていますか? –

+0

Nitpicking:あなたは "JSONオブジェクト"を持っていません。あなたはオブジェクトを持っているか、JSONを持っています。後者はデータ形式でSTRING以外は何もありません。 –

+0

私はもっと明確に編集しました。それを指してくれてありがとう。 – AdrianoRR

答えて

1

あなたはそれがであるかどうかをチェックしたくないの場合は、プロパティが存在するかどうかを確認したい(この場合はundefined)。 の代わりに==を使用しているため、チェックは機能します。タイプ(undefined == null,)の間で変換されます。

ネストされたプロパティをチェックする場合は、すべてのレベルをチェックする必要があります。 in演算子を使用することをお勧めします。プロパティーが存在するかどうかをチェックし、値が無視されるためです。

これは、あなたが何をしたいん:

if("product" in centralData && "StockGroup" in centralData.product){ 
    … 
} 
+0

「in」キーワードの場合+1。 – Jivings

+0

@ FB55それは働いた。しかし、私は製品のプロパティを初期化するか、 'centralData.product is not a object'を取得します。ありがとう。 – AdrianoRR

0

nullを使用する代わりに、オブジェクトをundefinedと比較してみてください。 JavaScriptがlazy evaluationを採用しているので

+0

'if(centralData.product.StockGroup!= 'undefined')'のように?どんな場合でもうまくいくのだろうか?私はネット上のいくつかの投稿を見てきました。これは、 '未定義'はヌルオブジェクトを確認する信頼できる方法ではないと言います。 – AdrianoRR

+0

もちろん、 "undefined"はnullでない "undefined"をチェックします。だから私はあなたがチェックするものを明確にするために、Qへの私のコメントで言ったのです。 "定義されていない"は "存在しない"、 "存在しない"、 "存在しない"を意味し、DOESには "null"という値があります。とても違う。 –

+0

ええ、そうです。 StockGroupが存在するかどうかを調べるには、これを試すことができます: 'if(centralData.product.StockGroup)' – lamelas

0

、あなたはパフォーマンスに無害で、次のようにチェックを実行することができます。

if(centralData.product != null && centralData.product.StockGroup != null){ 

} 
+0

これは動作しません。私は数分前に試しました。不思議なことに、Firefoxはそれを理解することができますが、ChromeやIEではありません – AdrianoRR

+0

コードを表示すると、これに何も問題はないので、あなたがやっている何か他のものでなければなりません... – Jivings

4

を私は財産ではなく

if(typeof (centralData.product || {}).StockGroup) !== "undefined") { 
    /* do something */ 
} 

チェックのこの種undefinedであるかどうかをチェックだろうと仮定しますwas described on ajaxianサイト全体のコードがはるかに短い

+0

興味深い解決策。 – Jivings

+0

本当に面白いです。これも動作しますが、私は@ FB55がより読みやすい答えを見つける。 – AdrianoRR

関連する問題