メモリ効率のために JSON データをストリーミング処理する
ストリーミング JSON パーサーは、ドキュメント全体をメモリに読み込まずにデータを漸次処理します。大きな JSON ファイルやリアルタイム API に必須です。
- 1
標準の JSON.parse はドキュメント全体をメモリに読み込みます。1GB の JSON ファイルには 1GB 以上のメモリが必要です。ストリーミングパーサー(SAX、StAX、Oboe.js、clarinet)はドキュメントを段階的に処理し、値に出会うたびにイベントを発行します。これにより、一定のメモリで任意に大きなファイルを処理できます。
- 2 JSON バリデーター →
大きな JSON の検証には、可能ならストリーミングバリデーターを使ってください。標準の検証はドキュメント全体を読み込みます。100MB を超えるファイルでは、NDJSON への分割かストリーミングパーサーの使用を検討してください。構造を段階的に検証します。
- 3 JSON フォーマッター →
整形には(インデントを計算するため)ドキュメント全体が必要です。大きなファイルは整形せず、ミニファイされた JSON を直接処理してください。可読性が必要なら、ファイルを小さなチャンクに分割して、それぞれを個別に整形します。
- 4
ストリーミングのパターン:(1) SAX スタイル — イベントのコールバックを登録(onObject、onArray、onValue)。(2) パスベース — 特定のパス(例: $.items[*].name)を購読して、マッチした値を処理。(3) NDJSON — JSON を改行区切りのオブジェクトに分割して、行ごとに処理。データの形状と処理の必要性に基づいて選んでください。
よくある質問
- いつストリーミング JSON が必要ですか?
- JSON ファイルが利用可能なメモリより大きい場合(通常 100MB 超)、リアルタイムデータ(WebSocket、SSE)を処理する場合、ドキュメント全体の受信を待たずに処理を開始したい場合です。小さな JSON(10MB 未満)では、標準のパースの方が速く簡単です。
- JSONPath ストリーミングとは何ですか?
- 一部のストリーミングパーサー(Oboe.js、jsonpath-stream)では、JSONPath 式を登録して、パースされるときにマッチした値を受け取れます。JSONPath の利便性とストリーミングのメモリ効率を組み合わせたもので、必要な値だけを処理します。
このタスクを解決するワークフロー
命名ケース変換と JSON 検証
識別子を対象の命名規則に変換し、構造を確認するために出力を JSON として検証する。 パイプライン
JSON 経由で 2 つの YAML 設定を比較
構造化された値の差分比較しやすいように、YAML 設定を JSON に変換する。 パイプライン
URL 転送用の JSON ペイロードのエンコード
JSON ドキュメントを URL パラメータ用に準備する: 整形、Base64 エンコード、パーセントエンコード — ネストされたパラメータデコードチェーンの正確な逆順。 パイプライン
HJSON から JSON フォーマットへ変換
HJSON をフォーマットし、標準 JSON に変換する。 パイプライン
JS フォーマットと JSON 検証
JS コードをフォーマットし、その後 JSON として検証する。 パイプライン
JSON フォーマットと整合性チェックサム計算
JSON ドキュメントを整形し、以降の変更を検出するために CRC32 チェックサムを計算する。 パイプライン
JSON のミニファイと検証
検査のために JSON をフォーマットし、1 パスで構文的に正しいことを検証する。 パイプライン
JSON Schema 生成と検証
サンプルデータから JSON Schema を生成し、それに対して検証する。 パイプライン
JSON フォーマットと TypeScript インターフェース生成
JSON ドキュメントをフォーマットし、1 チェーンで TypeScript インターフェース定義を推論する。 パイプライン
検証、フォーマット後 JSON から YAML へ変換
(ミニファイの可能性がある)JSON 設定を YAML に変換し、微妙に誤った YAML を生成成する代わりに最初のノードで構文エラーを捕捉する。 パイプライン
JSON5 から JSON フォーマットへ変換
JSON5 をフォーマットし、標準 JSON に変換する。 パイプライン
JSONC から JSON フォーマットへ変換
JSONC(コメント付き JSON)をフォーマットし、標準 JSON に変換する。 パイプライン
JWT ペイロードのデコードとフォーマット
JWT トークンを解析し、ペイロードを抽出し、検査のために JSON をフォーマットする。 パイプライン
クエリ文字列解析と JSON フォーマット
クエリ文字列をキー・バリューペアに解析し、その後 JSON としてフォーマットする。 パイプライン
TOML から JSON へ変換
TOML 設定ファイルを JSON 入力を期待するツールや API のために解析する。 パイプライン
JSON 経由で TOML から YAML へ変換
TOML 設定ファイルを YAML 形式に変換し、JSON を中間表現として使用する。 パイプライン
ネストされた URL パラメータのデコード(Base64 JSON)
URL エンコード Base64 JSON を運ぶ URL パラメータを可読なフォーマット済み JSON に展開する。 パイプライン
YAML から TypeScript インターフェースを生成
YAML ドキュメントを TypeScript インターフェース定義に変換し、JSON を中間フォーマットとして使用する。 パイプライン
YAML の検証とフォーマット
YAML を JSON に変換して構造を検証し、その後 JSON が well-formed であることを確認する。 パイプライン