我有一个文件,它以JSON的形式存储了许多JavaScript对象,我需要读取该文件,创建每个对象,并对它们进行处理(在我的例子中,将它们插入数据库).JavaScript对象可以用以下格式表示:
Format A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
还是Format 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()
呢?
理想情况下,每个对象都将被读取为一个单独的数据块,但我不确定是否为how to do that.
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!");
});*/
注意,我希望避免将整个文件读入内存.时间效率对我来说并不重要.是的,我可以try 一次读取多个对象,然后一次插入所有对象,但这是一个性能调整——我需要一种保证不会导致内存过载的方法,无论文件中包含多少对象.
我可以 Select 使用FormatA
或FormatB
,或者其他,请在你的答案中详细说明.谢谢