【Androidでデータやファイルと戯れる】JSONObjectを使ってJSONオブジェクトを組み立てる
JSONとはRFC 4627とRFC 7159で規定される構造化された文字列のことです。
AndroidでJSONを取り扱うにはorg.jsonパッケージを使用します。
今回は、JSONObjectを使ったJSONの生成を行います。
JSONObjectのインスタンス化
JSONObjectはJSONで言うところのオブジェクト(“{}”)を表現するクラスです。JSONObjectには複数のコンストラクタが存在しますが、今回は空っぽの状態から始めるため、引数を持たないJSONObject()を使用します。
この時、生成されたJSONObjectインスタンスは”{}”というJSON文字列を表すインスタンスとなります。
JSONObject jsonObject = new JSONObject();
JSONObjectにデータを配置する
オブジェクト内には0個以上のname/valueペア(members)を配置することができます。nameは文字列、valueはint・long・double・boolean・String・Object・Arrayを配置することが可能です。
配置するメソッドJSONObject#putは上記の型の違いに応じたオーバーロードが存在しています。
オーバーロードは下記のとおりです。
JSONObject put(String name, int value) |
nameを指定してint型のvalueをオブジェクトに追加します。すでに同名のnameがある場合は指定したvalueで上書きします。 nameにnullを渡すとJSONExceptionが発生します。 |
JSONObject put(String name, long value) |
nameを指定してlong型のvalueをオブジェクトに追加します。すでに同名のnameがある場合は指定したvalueで上書きします。 nameにnullを渡すとJSONExceptionが発生します。 |
JSONObject put(String name, double value) |
nameを指定してdouble型のvalueをオブジェクトに追加します。すでに同名のnameがある場合は指定したvalueで上書きします。 nameにnullを渡すとJSONExceptionが発生します。 |
JSONObject put(String name, boolean value) |
nameを指定してboolean型のvalueをオブジェクトに追加します。すでに同名のnameがある場合は指定したvalueで上書きします。 nameにnullを渡すとJSONExceptionが発生します。 |
JSONObject put(String name, Object value) |
nameを指定してObject型のvalueをオブジェクトに追加します。すでに同名のnameがある場合は指定したvalueで上書きします。 Object型はString・Boolean・Integer・Long・Double・NULL・nullやJSONObject(オブジェクト)やJSONArray(配列)を指定することができます。 nameにnullを渡すとJSONExceptionが発生します。 |
JSONObject accumulate(String name, Object value) |
指定したnameにvalueを追加します。 オブジェクトの状況によって動作が下記のようになります。 nameにnullを渡すとJSONExceptionが発生します。
|
JSONObject putOpt(String name, Object value) | put(name, value)の2つのパラメータはnull以外の値を設定する必要がありますが、このメソッドはnullを許可します。 |
JSONObjectを使ってJSONを組み立てる
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JSONObject jsonObject = createJSON(); } 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; } }