web-dev-qa-db-ja.com

JSONキーが存在するかどうかを確認する方法

だから、私はサーバーからいくつかのJSON値を取得しますが、私は特定のフィールドがあるかどうかわからない。

以下のようなので:

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

そして時々、次のような追加のフィールドがあるでしょう。

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

解析時にorg.json.JSONExceptionが返されないように、 "club"というフィールドが存在するかどうかをチェックしたいのですが、clubには値がありません

134
Adam Varhegyi

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

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

このオブジェクトにnameのマッピングがある場合はtrueを返します。マッピングはNULLでもかまいません。

230
PX Developer

'HAS'の場合、この方法で確認できます。このオブジェクトにnameのマッピングがある場合はtrueを返します。マッピングはNULLでもかまいません。

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

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

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

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

入力としてkeyを提供し、メソッドがtrueまたはfalseを返すかどうかを確認することで、JSONObject#hasを実行できます。あなたも

optStringの代わりにgetStringを使用します。

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

14
Blackbelt

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
}
9
IntelliJ Amiya

キーを読む直前に読む前にチェックする

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)

6

これを試して

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

次のような条件式を使う代わりに、もっと良い方法です。

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

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

String club = json.optString("club);

キーが存在しない場合はoptString( "key")メソッドは空の文字列を返します。したがって、例外はスローされません。

2
fuzzKitty
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
cdturner

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

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

JSONObjectで何かが作成されているかどうかを調べたいだけの場合は、length()を使用できます。これは、デフォルトではJSONObjectが初期化されていてnoであるためです。 keyが挿入され、空の中括弧{}があるだけで、を使用しても(String key)意味がありません。

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

ハッピーラーニング!

0
Gurinder

これを試して:

let json=yourJson

if(json.hasOwnProperty(yourKey)){
    value=json[yourKey]
}
0
Aishwarya