問題タブ [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 投票する
1 に答える
1420 参照

javascript - JSONStream の基本テストが機能しない

私は node.js で JSONStream を見ており、次の小さなアプリを試してハンドルを取得しようとしています:

残念ながら、コマンドラインで実行すると、コンソールに何も書き込まれません。私は何を間違っていますか?

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

javascript - 大きすぎてメモリに収まらない JSON オブジェクトの処理

JSON に格納されたユーザー テーブルを表す Firebase データベースのダンプがあります。データ分析を実行したいのですが、大きすぎてメモリに完全にロードして、純粋な JavaScript (または_同様のライブラリ) で操作できないという問題があります。

これまで、JSONStreamパッケージを使用して、データを一口サイズのチャンクで処理してきました (JSON ダンプ内のユーザーごとに 1 回コールバックを呼び出します)。

ただし、値に基づいてユーザー ID をフィルター処理したいため、障害が発生しました。私が答えようとしている「質問」は、「どのユーザー x」という形式のものですが、以前は「何人のユーザー x」と尋ねるだけで、彼らが誰であるかを知る必要はありませんでした。

データ形式は次のようになります。

私がやりたいことは、基本的に の値に基づいてユーザー ID (123または上記) を取得することです。これが小さなリストである場合、キーと値を反復処理して必要なキーを抽出するようなものを使用するのは簡単です。567foo_.each

残念ながら、メモリに収まらないため、機能しません。JSONStream を使用するvar parser = JSONStream.parse('users.*');と、次のようにそれを処理する関数を使用してパイプすることで、それを反復処理できます。

しかし、問題は、渡したスター ワイルドカードを表すキーにアクセスできないことですJSONStream.parse{ foo: bar}つまり、 がuser なの123か userなのかわかりません567

質問は 2 つあります。

  1. コールバック内から現在のパスを取得するにはどうすればよいですか?
  2. 大きすぎてメモリに収まらないこの JSON データを処理するより良い方法はありますか?
0 投票する
1 に答える
1672 参照

regex - Nodejs: JSONStream 解析メソッドの正規表現

私はこのようなペイロードを持っています

json ペイロードからのみ RESOURCE タグのコンテンツを抽出する必要があります。正規表現の定式化を手伝ってもらえますか? 以下は私が試したもので、parser.data メソッドを呼び出しません。

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

json - Oboe.js、MongoDB、Express.js による JSON ストリーミング

Oboe.js、MongoDB、および Express.js を使用して、HTTP を介した JSON ストリーミングを試しています。

ポイントは、MongoDB(Node.js の mongodb ネイティブ ドライブ) でクエリを実行し、それを (JavaScript 配列) にパイプしてExpress.js、ブラウザーでOboe.js.

私が行ったベンチマークは、MongoDB クエリ サーバー側とクライアント側での JSON 解析の両方でstreaming比較しました。blocking

2 つのベンチマークのソース コードを次に示します。はof (ページネーション)のfirst numberミリ秒数で、括弧の間は、MongoDB 結果配列の最初の項目が解析されるまでのミリ秒数を表します。1000 queries100 items10 million documents collectionsecond number

サーバー側のストリーミング ベンチマーク:

サーバー側のブロッキング ベンチマーク:

これらの結果には本当に驚かされます。

  1. Streamingblocking毎回よりも速くなります。
  2. Oboe.jsJSON.parseネイティブメソッドと比較して、JSON 配列全体を解析する方が高速です。
  3. Oboe.jsJSON.parseネイティブメソッドと比較して、配列の最初の要素を解析する方が高速です。

誰か説明がありますか?私は何を間違っていますか?

2 つのクライアント側ベンチマークのソース コードもここにあります。

クライアント側のストリーミング ベンチマーク:

クライアント側のブロッキング ベンチマーク:

前もって感謝します !

0 投票する
3 に答える
2232 参照

json - goで標準入力から無限のjson配列を解析するには?

このプロトコルに準拠した i3bar と通信する小さなプログラムである i3status の小さな代替品を作成しようとしています。それらは stdin と stdout を介してメッセージを交換します。

両方向のストリームは、json オブジェクトの無限配列です。i3bar から i3status (置き換えたい) へのストリームの開始は次のようになります。

これは、クリックを表すオブジェクトの「配列」です。配列は決して閉じません。

私の質問は今です:これを解析する正しい方法は何ですか?

jsonこれは有効なjsonオブジェクトではないため、明らかにライブラリを使用できません。

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

json - Node.jsでネストされた大きなオブジェクトをJSON文字列化するためにストリームを使用する方法は?

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

これを試すと、エラーが発生します。

どうやら、これにオブジェクトを書き込むことはできませんstringifyObject。次のステップが何かわかりません。オブジェクトをバッファに変換する必要がありますか? 変換ストリームを介してオブジェクトを実行し、パイプしますstrinigfyObject

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

node.js - node.js - JSONStream 中の無限ループ

本番環境でフリーズしている node.js サーバーを持っています。JSONStream 内の無限ループが原因のようです。フリーズしたサーバーのコア ダンプから取得したスタック トレースを次に示します。

この無限ループの原因を見つけるにはどうすればよいですか?

残念ながら、サーバーは本番環境で稼働しており、何千ものリクエストを処理しているため、追加のコンテキストを提供することは困難です. サーバーの基本的な機能は、他のサービスに対してアウトバウンド HTTP 要求を行うことです。

これがメモリリークが原因であるとは思わないことに注意してください。これらのフリーズ イベントの間、サーバーのメモリ使用量は一定 (かつ低く) に保たれますが、CPU は 99% に急上昇します。

無限ループが終了したことを示すもう 1 つの証拠は、イベント ループ自体が停止したように見えることです。setInterval 内に console.log を配置すると、サーバーがフリーズするとすぐに出力が停止します。

最大接続数を Infinity に設定することで (node.js での再利用を無効にします)、問題の原因がソケット接続の期限切れ/破損ではないことを確認しました。

JSONStream 0.7.1 を使用しています (デフォルトの jsonparse バージョン 0.0.5 が含まれています)。JSONStream リポジトリでこの問題を発見し、JSONParse をフォークして、最新の jsonparse バージョンにのみ更新しようとしました。問題は解決しませんでした。