#node.js #arrays #json
Вопрос:
У меня есть каталог с примерно 50 файлами JSON. Размер каждого файла составляет от 15 до 25 МБ. Все эти файлы содержат массивы объектов json со следующей общей структурой:
[
{"":"","":"","":["","",""]},
{"":"","":"","":["","",""]},
{"":"","":"","":["","",""]},
...
]
Мне нужно прочитать все эти файлы, а затем разделить эти файлы на отдельные массивы примерно по 50 объектов в каждом, а затем записать эти массивы в их собственные отдельные файлы. Поэтому мне в основном нужно взять один огромный массив в 1 файле и разрезать этот массив на множество меньших массивов и поместить эти меньшие массивы в их собственные отдельные файлы… Мне нужно уменьшить размер файла примерно до 1 МБ каждый.
У меня возникли проблемы с отдельной частью файла, я, кажется, не могу понять, как запустить цикл, чтобы ВСЕ файлы были записаны. Мне удалось записать до 5 файлов, но не все. Должно быть около 15 файлов, просто зависит от того, сколько объектов в огромном массиве.
На моей локальной машине(Ubuntu 20.04) 16 ГБ оперативной памяти, и я запускаю NodeJS v14x.
Почему он перестает писать после 5 файлов, это проблема с памятью или мой код неправильный?
const fs = require('fs');
const testfolder = './parse-testing/';
const fileNumbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40];
fs.readdir(testfolder, (err, files) => {
files.forEach(file => {
const articlesRaw = fs.readFileSync(file, 'utf8');
console.log('file is: ', file);
const articles = JSON.parse(articlesRaw);
console.log('array length is: ', articles.length);
const chunk = 50;
for (let i = 0; i <= articles.length; i = chunk) {
let slicedArticles = articles.slice(i, i chunk);
let newArticlesArray = JSON.stringify(slicedArticles);
while (articles.length !== null || undefined) {
[newArticlesArray].forEach(newArticleArray => {
fs.writeFileSync(`./testing-data/articles_testfile_${fileNumbers[i]}.json`, newArticleArray, {encoding: 'utf8'});
})
}
}
});
});