【Androidでデータやファイルと戯れる】JSONObjectを別のJSONObjectからコピーする

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

JSONとはRFC 4627RFC 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;
    }
}