流式写Json

我在ArrayListJsonObject 。 我需要将这些JsonObject添加到JsonArray并将其写入文件中。 我正在使用Gson ,下面是我的代码。

 private void myWriter(List jsonObjectHolder, int number) throws IOException { System.out.println("Starting to write the JSON File"); //Add everything into a JSONArray JsonArray jsonArrayNew = new JsonArray(); for(int i=0;i<jsonObjectHolder.size();i++) { //System.out.println("inside array: "+i); JsonObject o = jsonObjectHolder.get(i); System.out.println("inside array "+i+": "+o.get("title")); jsonArrayNew.add(jsonObjectHolder.get(i)); } System.out.println("Size: "+jsonArrayNew.size()); //Write it to the File File file= new File("items.json"); FileWriter fw = new FileWriter(file);; fw.write(jsonArrayNew.toString()); fw.flush(); fw.close(); System.out.println("outside array"); } 

我不喜欢这样。 ArrayList包含大量数据,我写的方式可能会产生OutOfMemoryError 。 相反,我想流和写这些文件。

更新

根据SO用户“Alden”的答案,这里我是如何编辑代码的。

 private void myWriter(List jsonObjectHolder) throws IOException { JsonWriter writer = new JsonWriter(new FileWriter(new File("items.json"))); Gson gson = new Gson(); writer.beginArray(); for (JsonObject jsonObject : jsonObjectHolder) { gson.toJson(jsonObject, writer); } writer.endArray(); writer.close(); } 

请告诉我这是否是正确的做法。

您可以使用Gson流式传输您的列表,如下所示:

 private void myWriter(List jsonObjectHolder, Gson gson) throws IOException { JsonWriter writer = new JsonWriter(new FileWriter(new File("items.json"))); writer.beginArray(); for (JsonObject jsonObject : jsonObjectHolder) { gson.toJson(jsonObject, writer); } writer.endArray(); writer.close(); } 

这假设您有一个可以使用的Gson实例。 如果不这样做,可以将writer.beginObject()writer.endObject()并手动向writer添加属性,但我不建议这样做,因为您已经完成了构建JsonObject的工作。