NodeJSasynchronousJSONparsing导致Buffer.toString()失败

我试图在NodeJS中parsing一个相当大的JSON文件(〜500Mb)。 我的实现基于这个答案中给出的asynchronous方法:

var fileStream = require('fs'); var jsonObj; fileStream.readFile('./data/exporttest2.json', fileCallback); function fileCallback (err, data) { return err ? (console.log(err), !1):(jsonObj = JSON.parse(data)); //Process JSON data here } 

这一切都很好,但我遇到了以下错误消息:

 buffer.js:495 throw new Error('"toString()" failed'); ^ Error: "toString()" failed at Buffer.toString (buffer.js:495:11) at Object.parse (native) at fileCallback (C:\Users\1700675\Research\Experiments\NodeJS\rf_EU.js:49:18) at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:445:3) 

我从这个答案可以理解,这是由V8引擎设置为256Mb的最大缓冲区长度引起的。

我的问题是,这是否有一种方法,我可以asynchronous阅读我的JSON文件,不超过256Mb的缓冲区长度,没有手动传播我的JSON数据到几个文件?

有没有一种方法,我可以asynchronous阅读我的JSON文件的大小不超过256Mb的缓冲区长度,没有手动传播我的JSON数据到几个文件?

这是一个共同的问题,有几个模块可以帮助你:

JSONStream示例:

 const JSONStream = require('JSONStream'); const fs = require('fs'); fs.createReadStrem('./data/exporttest2.json') .pipe(JSONStream.parse('...'))... 

有关所有参数的详细信息,请参阅文档。

尝试使用stream :

 let fs = require("fs"); let s = fs.createReadStream('./a.json'); let data = []; s.on('data', function (chunk) { data.push(chunk); }).on('end', function () { let json = Buffer.concat(data).toString(); console.log(JSON.parse(json)); });