我在 ArrayList
中有一大组 JsonObject
。我需要将这些 JsonObject
添加到 JsonArray
并将其写入文件。我正在使用 Gson
,下面是我的代码。
private void myWriter(List<JsonObject> 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<JsonObject> 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<JsonObject> 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()
一起使用,并手动向编写器添加属性,但我不推荐这样做,因为您已经完成构建 JsonObject
的工作。
关于java - 流式写Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577848/