json オブジェクトの連続ストリーム (json オブジェクトの配列ではない) を生成するバイナリ アプリケーションがあります。Json オブジェクトは複数の行にまたがることがあります (まだ有効な json オブジェクトですが、整形されています)。
このストリームに接続して、次のような問題なく読み取ることができます。
var child = require('child_process').spawn('binary', ['arg','arg']);
child.stdout.on('data', data => {
console.log(data);
});
ストリームはバッファであり、いつでもデータ イベントを発行します。したがって、バッファを行に解析するために readline モジュールを使用しました。これは、スパンしない Json オブジェクトに対して機能します (行を JSON.parse() できます)。複数行で。
最適な解決策は、次のような単一の json オブジェクトを返すイベントをリッスンすることです。
child.on('json', object => {
});
ストリーム ノードのドキュメントに objectMode オプションがあることに気付きましたが、ストリームを Buffer 形式で取得しているため、使用できないと思います。
pixl-json-stream、json-stream で npm を見ましたが、私の意見では、これらのどれも目的に適合していません。clarinet-object-stream がありますが、イベントに基づいて json オブジェクトをゼロから構築する必要があります。
私はjsonオブジェクトストリームを制御できません。ほとんどの場合、1つのオブジェクトが1行にありますが、10〜20%のjsonオブジェクトが複数の行(EOLとして\n)にあり、オブジェクト間のセパレーターはありません。新しいオブジェクトはそれぞれ、常に新しい行から始まります。
サンプル ストリーム:
{ "a": "a", "b":"b" }
{ "a": "x",
"b": "y", "c": "z"
}
{ "a": "a", "b":"b" }
明らかな何かが欠けているだけです。むしろ適切なモジュールを見つけて、このシナリオを処理するためにストリームパーサーを正規表現でハックします。