【Androidでデータやファイルと戯れる】JSONObjectを別のJSONObjectからコピーする
JSONとはRFC 4627とRFC 7159で規定される構造化された文字列のことです。
AndroidでJSONを取り扱うにはorg.jsonパッケージを使用します。
今回は、JSONObjectを別のJSONObjectインスタンスから作成します。
JSONObject(JSONObject copyFrom, String[] names)とは
JSONObjectにはJSONObjectとString[]を引数に持つコンストラクタがあります。このコンストラクタはJSONObjectからnameを指定してコピーすることができます。
しかし、namesにcopyFrom内に存在しないnameがあった場合は無視されます。
JSONObject(JSONObject copyFrom, String[] names)を使う
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JSONObject jsonObject = createJSONObjectFromJSONObject(); } private JSONObject createJSONObjectFromJSONObject() { JSONObject jsonObject = createJSON(); try { jsonObject = new JSONObject(jsonObject, new String[]{"boolean" , "int" , "object","none"}); } catch (JSONException e) { e.printStackTrace(); } return jsonObject; } 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; } }