我有一个文件,该文件以JSON形式存储许多JavaScript对象,我需要读取该文件,创建每个对象并对其进行处理(以我为例将其插入到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
其他方式,只需在您的答案中指定即可。谢谢!