如何使用stream到JSONstring在Node.js中的大型嵌套对象?

我有一个大的JavaScript对象,我想转换为JSON并写入一个文件。 我以为我可以用像这样的stream来做到这一点

var fs = require('fs'); var JSONStream = require('JSONStream'); var st = JSONStream.stringifyObject() .pipe(fs.createWriteStream('./output_file.js')) st.write(large_object); 

当我尝试这个时,我得到一个错误:

 stream.js:94 throw er; // Unhandled stream error in pipe. ^ TypeError: Invalid non-string/buffer chunk at validChunk (_stream_writable.js:153:14) at WriteStream.Writable.write (_stream_writable.js:182:12) 

所以显然我不能只写一个对象到这个stringifyObject 。 我不确定下一步是什么。 我需要将对象转换为缓冲区? 通过一些转换stream来运行对象,并将其传递给strinigfyObject

JSONStream不能这样工作,但是因为你的大对象已经被加载到内存中,所以没有任何意义。

 var fs = require('fs-extra') var file = '/tmp/this/path/does/not/exist/file.txt' fs.outputJson(file, {name: 'JP'}, function (err) { console.log(err) // => null }); 

这将写入JSON。

如果你想使用JSONStream你可以做这样的事情:

 var fs = require('fs'); var jsonStream = require('JSONStream'); var fl = fs.createWriteStream('dat.json'); var out = jsonStream.stringifyObject(); out.pipe(fl); obj = { test:10, ok: true }; for (key in obj) out.write([key, obj[key]]); out.end();