6

JSON に変換してファイルに書き込みたい大きな JavaScript オブジェクトがあります。このようなストリームを使用してこれを行うことができると思いました

  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

4

1 に答える 1

1

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();
于 2015-09-06T20:59:31.877 に答える