問題タブ [jsonstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
70 参照

node.js - Mongoose Stream API: ドキュメント構造

結果をブラウザーにストリーミングすることを考えています (nodejs とクライアント ライブラリ、おそらく Oboe.js のようなものを使用) が、ネストされたドキュメント構造が無限に深い可能性があります。

ネストされたオブジェクトを個別の mongo ドキュメントとして使用できるように、ドキュメント構造を変更する必要がありますか? それとも、stream() が部分的なオブジェクトをクライアントにコミットしますか?

ありがとう :)

0 投票する
1 に答える
1397 参照

javascript - JSONStream.parse でオブジェクト全体を解析する

次のような着信 JSON データ オブジェクト構造があります。

私は foo をある方法で扱い、別の方法で禁止したいと考えています。しかし、オブジェクトで JSONStream.parse("*") を使用すると、最初に受け取るチャンクは "3" です。

データ オブジェクトは非常に小さいため、ストリーマーにオブジェクト全体を返してもらい、それを操作します。ただし、プロジェクトの残りの部分と一貫性を保つために、ストリームを使用したいと思います。JSONStream にオブジェクト全体を渡すように強制するにはどうすればよいですか?

0 投票する
2 に答える
3497 参照

javascript - オブジェクトごとに JSON オブジェクトのストリームを読み取る方法

json オブジェクトの連続ストリーム (json オブジェクトの配列ではない) を生成するバイナリ アプリケーションがあります。Json オブジェクトは複数の行にまたがることがあります (まだ有効な json オブジェクトですが、整形されています)。

このストリームに接続して、次のような問題なく読み取ることができます。

ストリームはバッファであり、いつでもデータ イベントを発行します。したがって、バッファを行に解析するために readline モジュールを使用しました。これは、スパンしない Json オブジェクトに対して機能します (行を JSON.parse() できます)。複数行で。

最適な解決策は、次のような単一の json オブジェクトを返すイベントをリッスンすることです。

ストリーム ノードのドキュメントに objectMode オプションがあることに気付きましたが、ストリームを Buffer 形式で取得しているため、使用できないと思います。

pixl-json-stream、json-stream で npm を見ましたが、私の意見では、これらのどれも目的に適合していません。clarinet-object-stream がありますが、イベントに基づいて json オブジェクトをゼロから構築する必要があります。

私はjsonオブジェクトストリームを制御できません。ほとんどの場合、1つのオブジェクトが1行にありますが、10〜20%のjsonオブジェクトが複数の行(EOLとして\n)にあり、オブジェクト間のセパレーターはありません。新しいオブジェクトはそれぞれ、常に新しい行から始まります。

サンプル ストリーム:

明らかな何かが欠けているだけです。むしろ適切なモジュールを見つけて、このシナリオを処理するためにストリームパーサーを正規表現でハックします。

0 投票する
1 に答える
1322 参照

javascript - NodeJS JSONStream は、データを 1 つの長い文字列として返します

JSONStreamを使用してノードで解析しようとしている30万行のJSONファイルがあります。ドキュメントから、次の操作を行うと、ファイルの最初の 10 行がコンソールに出力されることを期待していますが、ドキュメント全体を文字列として取得し、\n各行の間に文字を入れます。

すべきではありませJSONStream.parse("*")ん... JSON を解析していますか? ここで何が間違っていますか?

0 投票する
0 に答える
212 参照

json - Oboe JS は、サーバー ストリームが停止したときにのみデータを返す

サーバーから JSON をストリーミングする oboe JS ストリームをセットアップしました。ストリームのリッスンを開始すると、データは取得されませんが、サーバーを強制終了するとすぐに、期待されるすべてのノードが取得されます。Oboe が戻る前にキャッシュしていると思います。オーボエのコードは次のとおりです。

0 投票する
1 に答える
871 参照

node.js - es.map() および JSONStream.stringify() を介して JSONStream.parsed() データをファイル ストリームにパイプするときにノード ヒープが使い果たされる

JSONStream.parse() を介して入力ストリーム (巨大な GeoJSON ファイルから作成) をパイプ処理してストリームをオブジェクトに分割し、次に event-stream.map() を介してオブジェクトを変換できるようにし、次に JSONStream を介してパイプしようとしています。 .stringify() を使用して文字列を作成し、最後に書き込み可能な出力ストリームにします。プロセスが実行されると、最終的にヒープを使い果たすまで、ノードのメモリ フットプリントが増加し続けることがわかります。問題を再現する最も単純なスクリプト (test.js) を次に示します。

JSON のエンドレス ストリームをノードの process.stdin に吐き出す小さな bash スクリプト (barf.sh) により、ノードのヒープが徐々に大きくなります。

次のように実行します。

この問題を回避する興味深い方法がいくつかあります。

  • fs.createWriteStream() を削除し、最後のパイプ ステージを「.pipe(out)」から「.pipe(process.stdout)」に変更してから、ノードの stdout を /dev/null にパイプします。
  • 非同期 es.map() を同期 es.mapSync() に変更します

上記の 2 つのアクションのいずれかにより、ノードのメモリ フットプリントが低く、変更されずに、スクリプトを永久に実行できます。Ubuntu 16.04 を実行する 8 GB の RAM を搭載した 8 コア マシンで、ノード v6.3.1、イベント ストリーム v3.3.4、および JSONStream 1.1.4 を使用しています。

私の側の明らかなエラーであると確信しているものを誰かが修正するのを手伝ってくれることを願っています。

0 投票する
1 に答える
423 参照

json - JSONPath と JSONStream を使用した json ストリームの解析

次のようなデータストリームがあります。

注: これらのマップ間にコンマはありません。

上記のように、2 つのマップをキャプチャできるように、このストリームを node.js で読み取りたいと考えています。これは、ストリーム内の個別の JSON エンティティを識別するのに適していますが、データを多少変更します。だから私が実行しているコードは次のとおりです。

そして、これは出力します:

変更されていない JSON マップを出力したい:

JSONStream などを使用して、これを達成する方法を知っている人はいますか?

0 投票する
0 に答える
407 参照

javascript - Node.js で準備ができたらデータをパイプする

次のような大きな JSON ファイルがあります。

そして、各オブジェクトの緯度と経度を探しています。データをパイプするために JSONStream モジュールを使用しています。

ジオコーディング部分が機能します。

私の問題は、検索関数が終了する前に JSONStream.stringify がデータを読み取ってパイプ処理することです。したがって、必要な変更を加えずに同じ JSON ファイルを取得しています。これを試してみると:

より多くの時間がかかるジオコーディングの代わりに、それは機能します。私の問題は、ストリーミングされたデータを変更するのにかかる時間にあると思います。では、変更されたデータをパイプする方法はありますか?

編集 同期と非同期の間で混乱がありました。ジョンズのおかげで