【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;
}
}