Задать вопрос
squadbrodyaga
@squadbrodyaga
帆は風を変えた

Пропадают данные при записи в JSON файл?

Здравствуйте, у меня есть JSON файл в котором 75 тысяч объектов, один объект выглядит примерно вот так:
{
  id: 1,
  kinopoisk_id: '...'
  title: "Дом дракона"
  type: "serial"
  description: null,
  poster_url: null,
}

Есть цикл который перебирает массив с данными объектами, попутно добавляя новые данные, такие как описание и URL картинки, а в конце я сохраняю этот JSON файл таким образом:
fs.writeFile('./data.json', JSON.stringify(data), (err) => {
  console.log(err)      
})


Проблема в том, что при каждом новом запуске куда-то теряются примерно 2 тысячи объектов, то есть если в начале у меня было 75 тыс., то после сохранения остаётся 73 тыс.

Как можно решить данную проблему?
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Простой 9 комментариев
Решения вопроса 1
@rPman
В необходимость правильного использования базы данных тебя уже "ткнули носом", повторять не буду.

Но если прямо очень хочется работать с файлами (а иногда это оправдано, например при монопольном однопользовательском доступе к данным) то совет, не храни 100500 данных в одном файле, создай каталог и внутри на каждый объект создавай json файл, с именем - идентификатор этого объекта

такая key-value база данных простая, удобная, быстрая, подходит там где sql это излишне. Иногда поверх этого делают индексы (файл в котором фильтруемым данным сопоставляется список id) но если возникает такая необходимость лучше все же задуматься о нормальной базе данных
-------------------

Теперь по вопросу, чтобы найти место и причину потери данных, создай лог, текстовый файл, в который будешь записывать факты чтения данных (прочитан объект id) и факты помещения их в итоговый файл (записан объект id), затем для каждого id, не попавшего в итоговый файл добавь дополнительного логирования по условию по каждой ветке условий в коде

Многие нормальные IDE позволяют вести отладку с брекпоинтами по условию, в этом случае все эти логи не нужны и все можно решить парой прогонов, расставив в нужных местах брекпоинты
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Внимательно оттестировать весь код и найти ошибку.
Либо перейти от файла к нормальной базе данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы