【Androidでデータやファイルと戯れる】JSONArrayからデータを取り出す
JSONとはRFC 4627とRFC 7159で規定される構造化された文字列のことです。
AndroidでJSONを取り扱うにはorg.jsonパッケージを使用します。
今回は、JSONArrayからデータを取り出します。
JSONArrayから確実に存在する要素番号のデータを取得する
JSONArrayにはデータを取り出すメソッドが複数あります。下記のメソッドでは、指定した要素番号が存在し、型が一致している必要があります。
boolean getBoolean(int index) | |
int getInt(int index) | |
long getLong(int index) | |
double getDouble(int index) | |
String getString(int index) | |
JSONObject getJSONObject(int index) | |
JSONArray getJSONArray(int index) | |
Object get(int index) |
JSONArrayから存在するかわからない要素番号のデータを取得する
JSONArray#getXXX系のメソッドは型が一致しない場合は、JSONExceptionがスローされます。下記のJSONArray#optXXX系のメソッドは型が一致しない場合にJSONExceptionがスローはされず規定の値を返却します。
boolean optBoolean(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はfalseが返却されます。 |
int optInt(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合は0が返却されます。 また、long型・double型の場合はint型にキャストされます。 |
long optLong(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合は0が返却されます。 また、int型・double型の場合はlong型にキャストされます。 |
double optDouble(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合は0が返却されます。 また、int型・long型の場合はdouble型にキャストされます。 |
String optString(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合は空文字が返却されます。 また、String型以外の値はObject#toString等を使い文字列に変換されます。 |
JSONArray optJSONArray(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はnullが返却されます。 |
JSONObject optJSONObject(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はnullが返却されます。 |
Object opt(int index) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はnullが返却されます。 |
JSONArrayから代替値を指定してデータを取得する
JSONArray#optXXX系の幾つかのメソッドにはオーバーロードが存在します。オーバーロードのメソッドには第二引数が存在し、この引数にした値が、型が一致する要素番号が存在しない場合に返却されます。
boolean optBoolean(int index, boolean fallback) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はfallbackが返却されます。 |
int optInt(int index, int fallback) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はfallbackが返却されます。 |
long optLong(int index, long fallback) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はfallbackが返却されます。 |
double optDouble(int index, double fallback) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はfallbackが返却されます。 |
String optString(int index, String fallback) |
指定した要素番号の値を取得します。 この時、要素番号の値が存在しない場合、または型が一致しない場合はfallbackが返却されます。 |
JSONObjectからデータを取得するサンプル
public class JsonArrayActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JSONArray jsonArray = createJSON(); getDataFromJSONArray(jsonArray); } private void getDataFromJSONArray(JSONArray jsonArray) { try { Log.d("JSONArray", "getBoolean : " + jsonArray.getBoolean(0)); Log.d("JSONArray", "getInt : " + jsonArray.getInt(1)); Log.d("JSONArray", "getLong : " + jsonArray.getLong(2)); Log.d("JSONArray", "getDouble : " + jsonArray.getDouble(3)); Log.d("JSONArray", "getString : " + jsonArray.getString(4)); Log.d("JSONArray", "getJSONObject : " + jsonArray.getJSONObject(5)); Log.d("JSONArray", "getJSONArray : " + jsonArray.getJSONArray(6)); Log.d("JSONArray", "get : " + jsonArray.get(7)); Log.d("JSONArray", "optBoolean : " + jsonArray.optBoolean(0)); Log.d("JSONArray", "optInt : " + jsonArray.optInt(1)); Log.d("JSONArray", "optLong : " + jsonArray.optLong(2)); Log.d("JSONArray", "optDouble : " + jsonArray.optDouble(3)); Log.d("JSONArray", "optString : " + jsonArray.optString(4)); Log.d("JSONArray", "optJSONObject : " + jsonArray.optJSONObject(5)); Log.d("JSONArray", "optJSONArray : " + jsonArray.optJSONArray(6)); Log.d("JSONArray", "opt : " + jsonArray.opt(7)); Log.d("JSONArray", "optBoolean fallback : " + jsonArray.optBoolean(100, false)); Log.d("JSONArray", "optInt fallback : " + jsonArray.optInt(100, 1000)); Log.d("JSONArray", "optLong fallback : " + jsonArray.optLong(100, 10000000000000000L)); Log.d("JSONArray", "optDouble fallback : " + jsonArray.optDouble(100, 20.5)); Log.d("JSONArray", "optString fallback : " + jsonArray.optString(100, "StringString")); } catch (JSONException e) { e.printStackTrace(); } } private JSONArray createJSON() { JSONArray jsonArray = new JSONArray(); try { jsonArray.put(true); jsonArray.put(100); jsonArray.put(18000305032230531L); jsonArray.put(10.5); jsonArray.put("String"); jsonArray.put(createJSONObject(5)); jsonArray.put(createJSONArray(5)); jsonArray.put(new HashMap<>()); jsonArray.put(new ArrayList<>()); jsonArray.put(10, false); jsonArray.put(15, 200); jsonArray.put(20, 10000000000000000L); jsonArray.put(25, 20.5); jsonArray.put(30, createJSONObject(1)); jsonArray.put(35, createJSONArray(1)); jsonArray.put(40, new HashMap<>()); jsonArray.put(45, new ArrayList<>()); } catch (JSONException e) { e.printStackTrace(); } return jsonArray; } }