У меня есть файл, в котором хранится множество объектов JavaScript в форме JSON, и мне нужно прочитать файл, создать каждый из объектов и что-то с ними сделать (в моем случае вставьте их в базу данных). Объекты 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
может быть, что-то еще, просто укажите в своем ответе. Спасибо!