#java #json #file #filewriter #bufferedwriter
#java #json #файл #filewriter #bufferedwriter
Вопрос:
Я отладил и обнаружил, что файл перезаписывается после каждой итерации.
Кроме того, если я не закрываю файл, в файл ничего не записывается. Я использую BufferedWriter — нужно ли нам явно закрывать файл или он позаботится об этом?
Вот мой код :
JSONArray jsonArr = new JSONArray(myrecords);
for (int i = 0; i < jsonArr.length(); i ) {
JSONObject jsonObj = jsonArr.getJSONObject(i);
System.out.println(jsonObj);
BufferedWriter writer = new BufferedWriter(new FileWriter("JsonFilenew.json"));
writer.write(jsonObj.toString());
String records = new String(Files.readAllBytes(Paths.get("JsonFilenew.json")));
JFlat flatMe = new JFlat(records);
flatMe.json2Sheet().headerSeparator().getJsonAsSheet();
file.close();
flatMe.write2csv("new.csv");
}
Ответ №1:
Итак, насколько я понимаю, у вас две проблемы с вашим кодом:
- Если вы используете FileWriter без второго параметра, он уничтожит исходный файл — если вы хотите добавить к файлу, попробуйте
new FileWriter("JsonFilenew.json",true)
- Я думаю, что код, в котором вы читаете файл и записываете его обратно как плоский json, должен быть вне цикла, поскольку это должно быть сделано только один раз.
Подробнее: Ваша другая проблема заключается в том, что простое объединение большого количества файлов json не делает json законным. Вам нужно сделать его законным массивом json (т.е. открываемым с помощью ‘[‘; каждый элемент разделяется символом ‘,’ и закрывается символом ‘]’
Комментарии:
1. Спасибо @Elemental, добавление второго параметра в качестве true добавило файл, но он показывает — Используйте JsonReader.setLenient(true), чтобы принять неверно сформированный JSON в строке 1, столбец 883, путь — myRecords имеет правильный формат json, что-то не так в преобразовании в JSONArray, что вызывает этоошибка
2. Добавлено больше к моему ответу