Java Как записать файл json по частям
У меня есть такая структура в json:
{"documents":{
"[0]":{
"parent":"...",
"metadata":
{"??":"???"},
"filename":"12313131",
"highlight_keywords":
{"[0]":
{"repeat":"2",
"pattern":"FREGATA",
"operator":"&",
"id_pattern":"12313131lfow"}},
"language":"it",
"categories":{"[0]":
{"rubric_name":"Террор",
"weight_pattern":"4" }
}
}
,
"[1]":{"parent":"...","metadata":{"??":"???"},"filename":"12313131","highlight_keywords":"12313131" }
}}
В этой структуре есть 2 главных элемента, это documents:[0] и documents:[1]. При записи данных я создаю структуру, которая состоит из JSONObject и JSONArray.
Код записи данных в файл:
//Способ 3
//Запись результата обработки в файл .json--------------
//outdir - Выходная директория (для .json)
String outdir = Path[1]; //Path[1] - выходной путь из config.xml
String newName = outdir + File.separator + datFile.replace("dat", "json");
File outPutFile_json = new File(newName); //Выходной файл .json для сохранения результата обработки
try {
//Создать root элемент
JSONObject root = new JSONObject();
//Cоздать массив для документов
JSONArray arrayOfDocs = new JSONArray();
//Положить arrayOfDocs в root
root.put("documents", arrayOfDocs);
//Заполнять этот массив результатами обработки каждого файла
for (HashMap.Entry entry : myDocs.entrySet()) {
//Текущий документ
CustomDocument curDoc = (CustomDocument) entry.getValue();
SONObject obj = new JSONObject(); //Стата по текущему документу
//Сохранить результат обработки текущего файла в arrayOfDocs
curDoc.saveDataTojson(curDoc, obj);
arrayOfDocs.add(obj);
}
//String message = root.toString();
if (!outPutFile_json.exists()) {
outPutFile_json.createNewFile();
try (BufferedWriter writerPsp = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPutFile_json), "UTF-8"))) {
writerPsp.write(root.toJSONString()); //Записать измененный текст с найденными рубриками в json
writerPsp.flush(); //Принудительно очищаем буфер BufferedWriter
} catch (Exception e) {
e.printStackTrace();
}
} else {
outPutFile_json.delete();
if (!outPutFile_json.exists()) {
outPutFile_json.createNewFile();
try (BufferedWriter writerPsp = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPutFile_json), "UTF-8"))) {
writerPsp.write(root.toJSONString()); //Записать измененный текст с найденными рубриками в json
writerPsp.flush(); //Принудительно очищаем буфер BufferedWriter
} catch (Exception e) {
e.printStackTrace();
}
}
}
Когда я хочу записать данные в структуру json я не могу заранее знать сколько будет этих главных объектов, поэтому могу записать файл только целиком, когда все что должно быть заполнено в root-documents будет заполнено, и тогда только сделать запись.
Поэтому вопрос, как можно сделать запись в json по частям? Скажем например я получил все данные для элемента documents:[0] записал его в файл, потом получил данные documents:[1] записал его в файл, при этом, чтобы не нарушалась структура конечного файла.