JSONPath正規表現フィルタ — フィルタ内でのパターンマッチング

JSONPathフィルタ式内で正規表現パターンマッチングを適用する方法を学びます。正規表現ベースのJSONデータフィルタリングのための =~ 演算子構文を解説します。

Advanced

詳細な説明

JSONPathにおける正規表現フィルタ

一部のJSONPath実装は、=~ 演算子を使用したフィルタ式内での正規表現マッチングをサポートしています。これにより、文字列プロパティがパターンにマッチする要素を選択でき、強力なテキストベースのフィルタリングが可能になります。

構文

$.array[?(@.property =~ /pattern/flags)]

正規表現はスラッシュで囲み、閉じスラッシュの後にオプションのフラグを付けます:

  • i — 大文字小文字を区別しない
  • g — グローバル(フィルタではほとんど不要)
  • m — マルチライン

  • $.files[?(@.name =~ /report.*\.pdf/i)] は大文字小文字を区別せずにすべてのレポートファイルを返します。
  • $.files[?(@.name =~ /^image/)] は "image" で始まるファイルのみを返します。
  • $.files[?(@.name =~ /\.(csv|pdf)$/i)] はすべてのCSVとPDFファイルを返します。

JSONPathでの一般的な正規表現パターン

パターン マッチ対象
/^prefix/ "prefix" で始まる文字列
/suffix$/ "suffix" で終わる文字列
/\d{4}-\d{2}/ 日付風パターン(YYYY-MM)
/^[A-Z]/ 大文字で始まる文字列

実装のサポート

正規表現フィルタはStefan Goessnerのオリジナルのパス仕様には含まれていません。サポートは実装により異なります:

  • Jayway JsonPath (Java): =~ による完全なサポート
  • jsonpath-plus (JavaScript): =~ によるサポート
  • Python jsonpath-ng: 限定的なサポート
  • RFC 9535 (IETF JSONPath): 標準演算子として含まれていない

本番環境で正規表現フィルタに依存する前に、ライブラリのドキュメントを確認してください。

正規表現が利用できない場合の代替

JSONPath実装が正規表現をサポートしていない場合:

  1. ワイルドカードですべての値を抽出し、アプリケーションコードでフィルタする。
  2. 可能な場合、プレフィックス/サフィックスマッチングに文字列比較演算子を使用する。
  3. JSONデータを前処理して計算済みのブールフィールドを追加する。

ユースケース

JSONデータ内でのパターンベースの検索に使用します。例えば、エラーパターンにマッチするすべてのログエントリの検索、拡張子によるファイルのフィルタリング、特定の命名規則にマッチするフィールドを持つレコードの選択、特定のフォーマットにマッチする文字列のAPIレスポンス検索などに活用できます。

試してみる — JSON Path Evaluator

フルツールを開く