だから、私はサーバーからいくつかのJSON値を取得しますが、私は特定のフィールドがあるかどうかわからない。
以下のようなので:
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited"
}
そして時々、次のような追加のフィールドがあるでしょう。
{ "regatta_name":"ProbaRegatta",
"country":"Congo",
"status":"invited",
"club":"somevalue"
}
解析時にorg.json.JSONExceptionが返されないように、 "club"というフィールドが存在するかどうかをチェックしたいのですが、clubには値がありません
JSONObjectクラスには "has"という名前のメソッドがあります。
http://developer.Android.com/reference/org/json/JSONObject.html#has(Java.lang.String)
このオブジェクトにnameのマッピングがある場合はtrueを返します。マッピングはNULLでもかまいません。
'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"));
入力としてkey
を提供し、メソッドがtrue
またはfalse
を返すかどうかを確認することで、JSONObject#has
を実行できます。あなたも
optString
の代わりにgetString
を使用します。
存在する場合は名前でマップされた値を返し、必要なら強制します。そのようなマッピングが存在しない場合は空の文字列を返します
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
}
キーを読む直前に読む前にチェックする
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)
これを試して
if(!jsonObj.isNull("club")){
jsonObj.getString("club");
}
次のような条件式を使う代わりに、もっと良い方法です。
if (json.has("club")) {
String club = json.getString("club"));
}
このように、既存のメソッドoptString()を使用するだけです。
String club = json.optString("club);
キーが存在しない場合はoptString( "key")メソッドは空の文字列を返します。したがって、例外はスローされません。
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;
現在のすべてのブラウザで動作します。
これを試して、キーが存在するかどうかを確認できます。
JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
object.get("key");
//etc. etc.
}
JSONObjectで何かが作成されているかどうかを調べたいだけの場合は、length()を使用できます。これは、デフォルトではJSONObjectが初期化されていてnoであるためです。 keyが挿入され、空の中括弧{}
があるだけで、を使用しても(String key)意味がありません。
だからあなたは直接if (jsonObject.length() > 0)
を書いてあなたのことをすることができます。
ハッピーラーニング!
これを試して:
let json=yourJson
if(json.hasOwnProperty(yourKey)){
value=json[yourKey]
}