Streaming to write Json



我在 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的工作。

最新更新