我在 ArrayList
内有大量的 JsonObject
s。我需要将这些JsonObject
S添加到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
。相反,我想流式传输并将其写入文件。
update
根据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
的工作。