В файл json записывается только последняя запись, когда я пытаюсь записать все записи в один и тот же файл

#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:

Итак, насколько я понимаю, у вас две проблемы с вашим кодом:

  1. Если вы используете FileWriter без второго параметра, он уничтожит исходный файл — если вы хотите добавить к файлу, попробуйте new FileWriter("JsonFilenew.json",true)
  2. Я думаю, что код, в котором вы читаете файл и записываете его обратно как плоский json, должен быть вне цикла, поскольку это должно быть сделано только один раз.

Подробнее: Ваша другая проблема заключается в том, что простое объединение большого количества файлов json не делает json законным. Вам нужно сделать его законным массивом json (т.е. открываемым с помощью ‘[‘; каждый элемент разделяется символом ‘,’ и закрывается символом ‘]’

Комментарии:

1. Спасибо @Elemental, добавление второго параметра в качестве true добавило файл, но он показывает — Используйте JsonReader.setLenient(true), чтобы принять неверно сформированный JSON в строке 1, столбец 883, путь — myRecords имеет правильный формат json, что-то не так в преобразовании в JSONArray, что вызывает этоошибка

2. Добавлено больше к моему ответу