如何使用流来JSON字符串化Node.js中的大型嵌套对象?

时间:2015-09-06 20:19:15

标签: json node.js io stream jsonstream

我有一个大型的javascript对象,我想将其转换为JSON并写入文件。我以为我可以使用像这样的流来做到这一点

  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写一个对象。我不确定下一步是什么。我需要将对象转换为缓冲区?通过一些转换流运行该对象并将其传递给strinigfyObject

1 个答案:

答案 0 :(得分:2)

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();