Gson での Big JSON の出力

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();
}