2015-09-06 9 views
5

私は、JSONに変換してファイルに書きたい、大きなjavascriptオブジェクトを持っています。JSONにストリームを使用してNode.jsの大きなネストされたオブジェクトをストリング化する方法は?

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にオブジェクトを書き込むカント:私はそう

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

    st.write(large_object); 

私はこれをしようとすると、私はエラーを取得するように、この使用してストリームを行うことができると思いました。私は次のステップが何であるか分かりません。オブジェクトをバッファに変換する必要がありますか?いくつかの変換ストリームを介してオブジェクトを実行し、それをパイプに接続しますstrinigfyObject

答えて

2

JSONStreamはそのようには動作しませんが、大きなオブジェクトは既にメモリにロードされているため、その点はありません。 JSONを書きます

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

あなたがJSONStreamを使用する場合は、このような何か行うことができます:あなたの最初の提案は、 `FATAL ERRORにつながる

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

を:JSの割り当てに失敗しました - プロセスをmemory' – kevzettler

+0

のうち、私はちょうど秒1を変更largeが配列でない限り、あなたの状況の正確なコードになります。それを試してください。 –

+0

私は2番目のバージョンを試しましたが、大きな割り当てられたオブジェクトを 'obj [key]'値の1つとして持っていて、メモリ割り当てエラーを投げています。私は子供オブジェクトの再帰的な何かsimilliarが必要でしょう – kevzettler