У меня есть большой набор JsonObject
s внутри ArrayList
. Мне нужно добавить эти JsonObject
s в файл JsonArray
и записать его в файл. Я использую Gson
, а ниже - мой код.Поток для написания Json
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
. Вместо этого я хотел бы Stream и записать их в файл.
Update
Согласно ответу SO пользователя "Олден", вот как я редактировал код.
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 означает просто так? 'Gson g = new Gson()'. Я могу просто создать этот экземпляр внутри метода правильно? –
Да, вы можете. Возможно, вы захотите, чтобы это было создано в другом месте, если вам нужны [пользовательские сериализаторы] (https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserialization), но вы должны 't здесь, потому что вы имеете дело с 'JsonObject', поэтому inline в порядке. – Alden
Спасибо за ответ. Я сделал обновление для своего сообщения, включая ваш ответ. Пожалуйста, смотрите. –