У мене є файл, який зберігає багато об’єктів JavaScript у формі JSON, і мені потрібно прочитати файл, створити кожен із об'єктів і зробити щось із ними (вставити їх у db у моєму випадку). Об'єкти JavaScript можуть бути представлені у форматі:
Формат A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
або Формат B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Зауважте, що ...
вказує багато об'єктів JSON. Я усвідомлюю, що міг прочитати весь файл в пам'яті, а потім використовувати JSON.parse()
так:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Однак файл може бути дійсно великим, я б вважав за краще використовувати потік для цього. Проблема, яку я бачу в потоці, полягає в тому, що вміст файлу може бути розбитий на фрагменти даних у будь-який момент, тож як я можу використовувати JSON.parse()
такі об’єкти?
В ідеалі кожен об'єкт читався б як окремий фрагмент даних, але я не впевнений, як це зробити .
var importStream = fs.createReadStream(filePath, {flags: 'r', encoding: 'utf-8'});
importStream.on('data', function(chunk) {
var pleaseBeAJSObject = JSON.parse(chunk);
// insert pleaseBeAJSObject in a database
});
importStream.on('end', function(item) {
console.log("Woot, imported objects into the database!");
});*/
Зауважте, я хочу запобігти читанню всього файлу в пам'яті. Ефективність часу для мене не має значення. Так, я міг би спробувати прочитати декілька об’єктів одночасно та вставити їх усі одразу, але це налаштування продуктивності - мені потрібен спосіб, який гарантовано не спричинить перевантаження пам'яті, незалежно від того, скільки об’єктів міститься у файлі .
Я можу вибрати FormatA
або використовувати FormatB
щось інше, просто вкажіть у своїй відповіді. Дякую!