jsonキーが存在するかどうかを確認するにはどうすればよいですか?


165

そのため、サーバーからいくつかのJSON値を取得しますが、特定のフィールドがあるかどうかはわかりません。

以下のようなので:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}

そして時々、次のような追加フィールドがあります:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}

「club」という名前のフィールドが存在するかどうかを確認したいので、解析時にorg.json.JSONException:クラブの値がありません


if(jsonObject.getString( "club")!= null){//ここで値を取得}
ソフトウェアSainath

3
いいえ、例外処理でコードは停止し、それ以上の解析アクションは実行されません。
アダムVarhegyi 2013

1
@SoftwareSainathそれは機能しませんが、それでも例外が発生しました。
アダムVarhegyi 2013

String clubvalue = ""; try(clubvalue = jsonobject.getString( "club");} catch(Exception e){}
ソフトウェアSainath

回答:


266

JSONObjectクラスには、「has」という名前のメソッドがあります。

http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

このオブジェクトに名前のマッピングがある場合、trueを返します。マッピングはNULLの場合があります。


28
「含んでいる」があまりにも汚いので?:)
Omri374

キーがIntegerタイプからのものである場合はどうなりますか?
Eido95

2
@ Eido95をIntegerキーとして持つのは悪い習慣のように聞こえます。JSONは文字列キーと必要な値のいずれかである必要があります。
ニコ

@ Eido95、私は整数には常に値があると信じています。整数を宣言するたびに、値で初期化する必要があります。
mut tony

154

この方法で 'HAS'を確認できます。このオブジェクトに名前のマッピングがある場合はtrueを返します。マッピングはNULLの場合があります。

if (json.has("status")) {
   String status = json.getString("status"));
}

if (json.has("club")) {
   String club = json.getString("club"));
}

'isNull'を使用して確認することもできます。このオブジェクトに名前のマッピングがない場合、または値がNULLのマッピングがある場合は、trueを返します。

if (!json.isNull("club"))
    String club = json.getString("club"));

1
どのjson libを使用していますか、json-smartまたはjson-simpleの簡単な例を提供できますか
samuel owino

@samuelowino jsonは、オブジェクトを含む変数です
Fernando Torres

17

あなたは可能性がありJSONObject#has、提供するkeyメソッドが返す場合、入力およびチェックとしてtruefalse。あなたもできます

optString代わりに使用getString

存在する場合は名前でマップされた値を返し、必要に応じて強制します。そのようなマッピングが存在しない場合は、空の文字列を返します


1
このメソッドは他の方法でも使用できますが、値が存在する場合は返されません。getString空の文字列が返された場合は、空の文字列optStringも返されます。その場合、想定は、そのプロパティがOPの状況では利用できないと信じ込ませます。
halfpastfour.am 2014

@Blackbeltこれのソースはありますか?
tsuz

10

使用できます has

public boolean has(String key)

JSONObject特定のキーが含まれているかどうかを確認します

JSONObject JsonObj = new JSONObject(Your_API_STRING); //JSONObject is an unordered collection of name/value pairs

if (JsonObj.has("address")) { 
    //Checking address Key Present or not
    String get_address = JsonObj .getString("address"); // Present Key
}
else {
    //Do Your Staff
}

10

読み取りキーの直前に読み取り前と同様に確認してください

JSONObject json_obj=new JSONObject(yourjsonstr);
if(!json_obj.isNull("club"))
{
  //it's contain value to be read operation
}
else
{
  //it's not contain key club or isnull so do this operation here
}

isNull関数定義

Returns true if this object has no mapping for name or
if it has a mapping whose value is NULL. 

isNull関数のリンクの下の公式ドキュメント

http://developer.android.com/reference/org/json/JSONObject.html#isNull(java.lang.String)


2

これを試して

if(!jsonObj.isNull("club")){
    jsonObj.getString("club");
}

2
isNull実際にはマッピングがnullかどうかをチェックするためのものであり、jsonメンバーの可用性をチェックするためのものではありません。
Reza_Rg 2015

2

次のような条件を使用する代わりに、より良い方法:

if (json.has("club")) {
    String club = json.getString("club"));
 }

次のように、既存のメソッドoptString()を使用するだけです。

String club = json.optString("club);

キーが存在しないためにoptString( "key")メソッドが空の文字列を返し、そのため例外がスローされます。


2

Jsonにはと呼ばれるメソッドがありcontainsKey()ます。

これを使用して、特定のキーがJsonセットに含まれているかどうかを確認できます。

File jsonInputFile = new File("jsonFile.json"); 
InputStream is = new FileInputStream(jsonInputFile);
JsonReader reader = Json.createReader(is);
JsonObject frameObj = reader.readObject();
reader.close();

if frameObj.containsKey("person") {
      //Do stuff
}

1
I used hasOwnProperty('club')

var myobj = { "regatta_name":"ProbaRegatta",
    "country":"Congo",
    "status":"invited"
 };

 if ( myobj.hasOwnProperty("club"))
     // do something with club (will be false with above data)
     var data = myobj.club;
 if ( myobj.hasOwnProperty("status"))
     // do something with the status field. (will be true with above ..)
     var data = myobj.status;

現在のすべてのブラウザで動作します。



1

これを試して、キーが存在するかどうかを確認できます。

JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
  object.get("key");
  //etc. etc.
}

0

あなただけの何かがJSONObjectで作成されたかどうか、あなたが使用できるかどうかを確認したい場合、私はちょうど、別のものを追加してい長さを(デフォルトでJSONObjectが初期化され、キーが挿入されていない場合ので、それだけで空の括弧を持ち、){}と使用しています(文字列キー)意味がありません。

だから、あなたif (jsonObject.length() > 0)はあなたの物事を直接書いて行うことができます。

幸せな学習!


0

JsonNode#hasNonNull(String fieldName)を使用できます。これは、hasメソッドとnull値かどうかの検証を組み合わせます。

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