Google Gson の場合、大きなサイズの JSON を出力、gson の toJson では一度作成元 Object を持ってしまうので、
大きなサイズの JSON は toJsonでは不向きである。
大きなサイズのJSON を出力をする場合、JsonWriter を使う。
例)
OutputStream out = // TODO try(JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8))){ // 開始 writer.beginObject(); writer.name("title").value("タイトル"); writer.name("data"); // 配列開始 writer.beginArray(); // TODO Loop により、大量の配列を出力 for(int n=0;n < 1000;n++){ writer.beginObject(); writer.name("id").value("11"); writer.name("name").value("あいう"); writer.name("flag").value(true); writer.endObject(); } // 配列終了 writer.endArray(); // 終端 writer.endObject(); }catch(IOException e){ e.printStackTrace(); }
これは、ラップする程のことでもない。素直にループで充分
ループの中を長くしたくないのであれば、ループ内で toJsonを書けば良い。
Gson gson = new GsonBuilder().serializeNulls().create(); OutputStream out = // TODO try(JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8))){ // 開始 writer.beginObject(); writer.name("title").value("タイトル"); writer.name("data"); // 配列開始 writer.beginArray(); // TODO Loop により、大量の配列を出力 for(int n=0;n < 1000;n++){ gson.toJson(e, TypeToken.get(Item.class).getType(), writer); } // 配列終了 writer.endArray(); // 終端 writer.endObject(); }catch(IOException e){ e.printStackTrace(); }