Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 流式编写Json_Java_Json_Io_Stream_Gson - Fatal编程技术网

Java 流式编写Json

Java 流式编写Json,java,json,io,stream,gson,Java,Json,Io,Stream,Gson,我在ArrayList中有一大组JsonObjects。我需要将这些JsonObjects添加到JsonArray并将其写入文件。我正在使用Gson,下面是我的代码 private void myWriter(List<JsonObject> jsonObjectHolder, int number) throws IOException { System.out.println("Starting to write the JSON File");

我在
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");


    }

请让我知道这是否是正确的方法。

您可以使用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();
}
private void myWriter(List jsonObjectHolder,Gson Gson)抛出IOException
{
JsonWriter=newjsonwriter(newfilewriter(新文件(“items.json”)));
writer.beginArray();
用于(JsonObject JsonObject:JsonObject持有人)
{
toJson(jsonObject,writer);
}
writer.endArray();
writer.close();
}

这假设您有一个可以使用的
Gson
实例。如果您不这样做,您可以将
writer.beginObject()
writer.endObject()
一起使用,并手动向writer添加属性,但我不建议这样做,因为您已经完成了构建
JsonObject
的工作,谢谢您的回复。Gson对象的意思是,就这么简单
Gson g=new Gson()
。我可以简单地在方法内部创建这个实例,对吗?是的,你可以。如果需要,您可能希望在其他地方创建,但不应该在这里创建,因为您正在处理
JsonObject
,因此内联是可以的。谢谢您的回复。我更新了我的帖子,包括你的答案。请看一看。好的,我的答案有问题吗?或者你在找别的东西吗?这似乎解决了您的问题。我想他不想生成完整的对象,然后写入它,而是在收集时写入它(从db或其他地方),所以在生成每一行时写入它。这样就不需要写入内存阵列。直接到输出流。你的帖子在这方面很有帮助。
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();
}