メインコンテンツへスキップ
SDETRole
SDETRole

JSON・データ

JSONPath テスター

実際の JSON で JSONPath 式を試し、すべての一致とパスを確認。

すべてブラウザ内で動作 登録不要

JSON document

0 chars

Result

Paste JSON or load the sample, then type an expression

Results update as you type. Filter expressions are evaluated by a safe interpreter, never with eval.

Syntax cheatsheet

ExpressionMeaningAction
$Root of the document
$.store.bicycleChild by name (dot notation)
$['store']['book']Child by name (bracket notation, for keys with spaces or dashes)
$..authorRecursive descent: every "author" at any depth
$.store.*Wildcard: all children
$.store.book[0]Array index (0-based)
$.store.book[-1:]Last element (slice)
$.store.book[0,2]Union of indexes
$.store.book[1:3]Slice: index 1 up to (not including) 3
$.store.book[?(@.price < 10)]Filter: elements matching a condition
$..book[?(@.isbn)]Filter: elements that have a truthy "isbn"
$..book[?(@.category == 'fiction' && @.price > 10)]Combined conditions with && and ||
$.store.*~Property names instead of values (jsonpath-plus extension)

Filters support @ and $ references, strings, numbers, true/false/null, == != < <= > >=, &&, || and !. Script expressions such as [(@.length-1)] and function calls are not executed.

このツールについて

JSONPath は、ほとんどの API テストフレームワークがレスポンスから値を取り出す方法です。REST Assured の JsonPath、Postman のスクリプト、Karate、多くのアサーションライブラリが同じ考え方を使っています。実際のレスポンスに対して式を書けば、失敗するテスト実行を 1 回分減らせます。このテスターはスクリプト評価を無効にした jsonpath-plus を使い、[?(@.price < 10)] のようなフィルター式は小さな組み込みインタープリターで評価するため、貼り付けた内容がコードとして実行されることはありません。一致した値はすべて正規化されたパスつきで表示され、値がどこから来たのかが正確にわかります。

使い方

  1. 左のパネルに JSON レスポンスを貼り付けるか、「Load sample」(サンプルを読み込む)で定番の書店(bookstore)ドキュメントを読み込みます。
  2. $ で始まる式を入力します。入力に合わせて結果が更新されます。
  3. 値、パス、またはその両方のどれを表示するかを選び、結果をコピーします。
  4. チートシートの「Try」(試す)ボタンで、再帰下降、スライス、ユニオン、フィルターの動作を確認できます。

JSONPath テスター のよくある質問

ここでは動く式が REST Assured で動かないのはなぜですか?

REST Assured は Goessner の JSONPath ではなく Groovy の GPath を使っています。GPath の「store.book.findAll { it.price < 10 }.title」は、ここでの「$.store.book[?(@.price < 10)].title」と同じ意味です。単純なドット区切りのパスは両者で同じですが、フィルターやワイルドカードは構文が異なります。

どのフィルター構文に対応していますか?

フィルターでは現在の要素(@)またはルート($)を参照し、== != < <= > >= で比較し、&& || ! で組み合わせ、文字列、数値、true、false、null を使えます。[(@.length-1)] のようなスクリプト式や JavaScript のメソッド呼び出しは意図的に実行しません。最後の要素にはスライス [-1:] を使ってください。

キーが存在するのに一致しないのはなぜですか?

よくある原因は、大文字・小文字の違い(userId と userid)、値が配列の中にあるのに [*] を付けていない、ダッシュやスペースを含むキーで $['first-name'] のようなブラケット記法が必要、といったものです。

キーワードを入力すると SDETRole 全体を検索できます。

Pagefind による全文検索 · ブラウザ内で動作します 検索ページを開く →