Google gson の JsonWriter の setIndent の方法ではなく、gson インスタンスを生成する前の
GsonBuilder で、setPrettyPrinting を実行する方法、
既に存在するJSON 文字列から、整形する場合。
文字列→整形した文字列
String json = "{\"a\":\"A\",\"b\":[10,11,12], \"c\":{\"d\":\"e\",\"f\":null}}"; String body = new GsonBuilder().serializeNulls().setPrettyPrinting().create() .toJson(JsonParser.parseString(json));
body を標準出力すると
{ "a": "A", "b": [ 10, 11, 12 ], "c": { "d": "e", "f": null } }
これは、JsonParser.parseString が、Google gson の JsonElement を求めるのを利用して
gson の toJson で整形文字列を求める方法である。
JsonParser には、parseReader(Reader reader) つまり、Java.io.Reader から同じように JsonElement を求める
static メソッドもあり、
toJson も、public void toJson(JsonElement jsonElement, Appendable writer)
、
Appendable writer つまり、
FileWriter, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder, StringWriter, Writer
を指定できるので、
未整形JSONを読込む Reader から、整形して、Wrtier に書込みということが、
この JsonParser → JsonElement → gson toJson → 整形済JSON
出力できるということである。