【Androidでデータやファイルと戯れる】JSONStringerからJSON文字列を作成する
JSONとはRFC 4627とRFC 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();
}
}