Gsonで未整形JSON を人が見やすいように整形する。

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
出力できるということである。