メインコンテンツまでスキップ

JSONPath

Proxyman で JSONPath を使い、JSON のリクエスト/レスポンス本文をクエリします。構文、フィルタ演算子、そのままコピーして使えるパスの例を解説します。

1. 概要​

JSONPath は、JSON データをすばやく絞り込むためのクエリ言語です。Proxyman では、JSON タブ、Treeview タブ、カスタムカラムで使用できます。

JSON Path 式でレスポンス本文を絞り込んでいる Proxyman の JSON タブ

2. 使い方​

  1. Request または Response パネルで + ボタンをクリックします
  2. JSON を選択して JSON タブを追加します
  3. JSON 本文の上にフィルタバーが表示されます
  4. JSON Path または jq のフィルタモードを選択します

3. 構文​

演算子説明
$クエリの起点となるルート要素です。すべてのパス式はここから始まります。
@フィルタの述語で処理中の現在のノードです。
*ワイルドカードです。名前または数値が必要な箇所であればどこでも使用できます。
..深い階層まで走査します。名前が必要な箇所であればどこでも使用できます。
.<name>ドット記法による子要素
['<name>' (, '<name>')]ブラケット記法による子要素(複数指定可)
[<number> (, <number>)]配列のインデックス(複数指定可)
[start:end]配列のスライス演算子
[?(<expression>)]フィルタ式。式は真偽値に評価される必要があります。

フィルタ演算子​

フィルタは、配列を絞り込むために使う論理式です。典型的なフィルタは [?(@.age > 18)] のような形式で、@ は処理中の現在の要素を表します。

演算子説明
==左辺が右辺と等しい(1 と '1' は等しくないので注意してください)
!=左辺が右辺と等しくない
<左辺が右辺より小さい
<=左辺が右辺以下である
>左辺が右辺より大きい
>=左辺が右辺以上である
=~左辺が正規表現に一致する [?(@.name =~ /foo.*?/i)]
in左辺が右辺に存在する [?(@.size in ['S', 'M'])]
nin左辺が右辺に存在しない
subsetof左辺が右辺の部分集合である [?(@.sizes subsetof ['S', 'M', 'L'])]
anyof左辺と右辺に共通する要素がある [?(@.sizes anyof ['M', 'L'])]
noneof左辺と右辺に共通する要素がない [?(@.sizes noneof ['M', 'L'])]
size左辺(配列または文字列)のサイズが右辺と一致する
empty左辺(配列または文字列)が空である

パスの例​

次の JSON データを例に説明します。

{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}
JsonPath結果
$.store.book[*].authorすべての書籍の著者
$..authorすべての著者
$.store.*書籍と自転車のすべての要素
$.store..priceすべての商品の価格
$..book[2]3 番目の書籍
$..book[-2]後ろから 2 番目の書籍
$..book[0,1]最初の 2 冊の書籍
$..book[:2]インデックス 0(含む)から 2(含まない)までのすべての書籍
$..book[1:2]インデックス 1(含む)から 2(含まない)までのすべての書籍
$..book[-2:]最後の 2 冊の書籍
$..book[2:]インデックス 2(含む)から末尾までのすべての書籍
$..book[?(@.isbn)]ISBN 番号を持つすべての書籍
$.store.book[?(@.price < 10)]価格が 10 未満のすべての書籍
$..book[?(@.price <= $['expensive'])]「expensive」ではないすべての書籍
$..book[?(@.author =~ /.*REES/i)]正規表現に一致するすべての書籍(大文字と小文字を区別しない)
$..*すべての要素を取得
$..book.length()書籍の数

参考資料​