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実装が正規表現をサポートしていない場合:
- ワイルドカードですべての値を抽出し、アプリケーションコードでフィルタする。
- 可能な場合、プレフィックス/サフィックスマッチングに文字列比較演算子を使用する。
- JSONデータを前処理して計算済みのブールフィールドを追加する。
ユースケース
JSONデータ内でのパターンベースの検索に使用します。例えば、エラーパターンにマッチするすべてのログエントリの検索、拡張子によるファイルのフィルタリング、特定の命名規則にマッチするフィールドを持つレコードの選択、特定のフォーマットにマッチする文字列のAPIレスポンス検索などに活用できます。