【Androidでデータやファイルと戯れる】JSONObjectの内容を操作する
JSONとはRFC 4627とRFC 7159で規定される構造化された文字列のことです。
AndroidでJSONを取り扱うにはorg.jsonパッケージを使用します。
今回は、JSONObjectの内容を操作します。
JSONObjectを操作するメソッド
JSONObject内のデータを操作するメソッドには様々な種類があります。これらのメソッドを利用してJSONObjectインスタンス内の構造や状態を確認することができます。
boolean has(String name) |
JSONObjectインスタンス内に指定したnameが存在するかを判定する。 存在する場合はtrue、存在しない場合はfalseが返却されます。 |
boolean isNull(String name) |
JSONObjectインスタンス内に指定したnameが NULLかどうかを判定する。 NULLの場合はtrue、NULLではない場合、又は存在しない場合はfalseが返却されます。 |
Iterator |
JSONObjectインスタンス内のすべてのnameをIterator |
int length() | JSONObjectインスタンス内のnameの数を取得します。 |
JSONArray names() | JSONObjectインスタンス内のすべてのnameをJSONArrayで取得します。 |
Object remove(String name) | JSONObjectインスタンスから指定したnameのvalueを除去し取得します。 |
JSONArray toJSONArray(JSONArray names) |
JSONArrayで指定したnameに対応するvalueをJSONArrayで取得する。 この時、JSONObjectインスタンス内にnameが存在しない場合はnullが設定されます。 |
String toString() | JSONObjectインスタンスからJSON文字列を生成します。 |
String toString(int indentSpaces) | JSONObjectインスタンスから成形済みのJSON文字列を生成します。 |
JSONObjectを操作する
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JSONObject jsonObject = createJSON(); getDataJSONObject(jsonObject); try { int anInt = jsonObject.getInt("int"); } catch (JSONException e) { e.printStackTrace(); } operationJsonObject(jsonObject); } private void operationJsonObject(JSONObject jsonObject) { boolean hasInt = jsonObject.has("int"); boolean hasINT = jsonObject.has("INT"); boolean isPutNULL = jsonObject.isNull("put null"); boolean isNULL = jsonObject.isNull("int"); Iterator<String> keys = jsonObject.keys(); int length = jsonObject.length(); JSONArray names = jsonObject.names(); Object removedObject = jsonObject.remove("int"); String toString = jsonObject.toString(); JSONArray jsonArray; String toStringJSON; try { jsonArray = jsonObject.toJSONArray(names); toStringJSON = jsonObject.toString(1); } catch (JSONException e) { e.printStackTrace(); } return; } private void getDataJSONObject(JSONObject jsonObject) { int getInt; int optInt; int fallbackInt; try { getInt = jsonObject.getInt("int"); optInt = jsonObject.optInt("int"); fallbackInt = jsonObject.optInt("int1" , 500); } catch (JSONException e) { e.printStackTrace(); } return; } private JSONObject createJSON() { JSONObject jsonObject = new JSONObject(); try { jsonObject.put("boolean" , true) .put("double" , 10.5) .put("int" , 100) .put("long" , 18000305032230531L) .put("string" , "string") .put("object" , createJSONObject(5)) .put("array" , createJSONArray(5)) .putOpt(null, JSONObject.NULL) .put("put null", JSONObject.NULL) .put("array" , createJSONArray(5)) .accumulate("accumulate" , 1) .accumulate("accumulate" , 2) .accumulate("accumulate" , 3); } catch (JSONException e) { e.printStackTrace(); } Log.d("JSON", "onCreate: " + jsonObject.toString()); return jsonObject; } private JSONObject createJSONObject(int count) { JSONObject jsonObject = new JSONObject(); try { for(int i = 0 ; i < count ; i ++){ jsonObject.put("JSON_OBJECT_"+ i , i); } } catch (JSONException e) { e.printStackTrace(); } return jsonObject; } private JSONArray createJSONArray(int count){ JSONArray jsonArray = new JSONArray(); try { for(int i = 0 ; i < count ; i ++){ jsonArray.put(i , i); } } catch (JSONException e) { e.printStackTrace(); } return jsonArray; } }