【Androidでデータやファイルと戯れる】JSONStringerからJSON文字列を作成する

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

JSONとはRFC 4627RFC 7159で規定される構造化された文字列のことです。

AndroidでJSONを取り扱うにはorg.jsonパッケージを使用します。
今回は、JSONStringerを使ったJSON文字列の作成を行います。

JSONStringerとは

JSONStringerに定義されているメソッドを使ってJSON文字列を構築します。
JSONStringerの使用時は下記のルールを守る必要があり、ルールを破った場合はJSONExceptionが発生します。
  • JSONStringerで作成するJSON文字列はトップレベルにアレイまたはオブジェクトを持つ必要があります。
  • JSONStringerのarray()-endArray()とobject()-endObject()の呼び出し数は一致しないといけない
  • アレイの中ではkeyを持つことはできません。
  • オブジェクトの中ではkeyとvalueを交互に呼ぶ必要があります。
  • 値はvalueメソッドの呼び出しやアレイ・オブジェクトをネストして挿入する必要があります。
  • アレイやオブジェクトのネストは20階層までサポートしています。

JSONStringerのメソッド

JSONStringer object() オブジェクトの開始を表す”{“をJSON文字列に追加する
JSONStringer endObject() オブジェクトの終了を表す”}”をJSON文字列に追加する
JSONStringer array() アレイの開始を表す”[“をJSON文字列に追加する
JSONStringer endArray() アレイの終了を表す”]”をJSON文字列に追加する
JSONStringer key(String name) nameをkeyとしてJSON文字列に追加する
JSONStringer value(boolean value) boolean型のvalueをJSON文字列に追加する
JSONStringer value(long value) long型のvalueをJSON文字列に追加する
JSONStringer value(double value) double型のvalueをJSON文字列に追加する
JSONStringer value(Object value) 各型(JSONObject・JSONArray・String・Boolean・Integer・Long・Double・null)のvalueをJSON文字列に追加する
String toString() JSONStringerインスタンスの内容をJSON文字列に変換する

JSONStringerを使う

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String jsonStringer = createJSONStringer();
    }
    private String createJSONStringer() {
        JSONStringer jsonStringer = new JSONStringer();
        try {
            jsonStringer.object();
            jsonStringer.key("boolean").value(Boolean.TRUE);
            jsonStringer.key("double").value(10.5);
            jsonStringer.key("int").value(100);
            jsonStringer.key("long").value(18000305032230531L);
            jsonStringer.key("string").value("string");
            jsonStringer.key("object");
            jsonStringer.object();
            jsonStringer.key("object_1").value(1);
            jsonStringer.key("object_2").value(2);
            jsonStringer.key("object_3").value(3);
            jsonStringer.endObject();
            jsonStringer.key("array");
            jsonStringer.array();
            jsonStringer.value(1);
            jsonStringer.value(2);
            jsonStringer.value(3);
            jsonStringer.endArray();
            jsonStringer.key("null").value(null);
            jsonStringer.endObject();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jsonStringer.toString();
    }
}