【Androidでデータやファイルと戯れる】JSONObjectの内容を操作する

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

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