← ハシトシステム トップ English ツール ブログ
入力
評価結果

JSONと式を入れると、一致した値とパスがここに出ます。

JSONPath とは

JSONPath は、JSON の中から特定の値を取り出すための式です。XML の XPath を JSON に置き換えたもので、2007 年に Stefan Goessner が提案した記法が事実上の共通仕様になっています。$ がJSON全体(ルート)を指し、そこから .[] でたどっていきます。

たとえば $.store.book[0].title は「store の中の book 配列の 0 番目の title」です。配列の添字は 0 から始まります。1 から数えると1つずれるので、最初に間違えやすいのはここです。

対応している記法

記法意味
$ルート。式は必ずここから始める
.name / ['name']キーで1階層下りる。記号や空白を含むキーは ['...'] を使う
[0] / [-1]配列の添字。負の値は末尾から数える
[1:3]配列の範囲。1 以上 3 未満(3 は含まない)
[*] / .*その階層の全要素
..name再帰下降。どの深さにあっても name を全部拾う
[?(@.k > 10)]フィルタ。@ は「いま見ている要素」。== != < <= > >= が使える
[?(@.k)]キー k を持つ要素だけ(存在チェック)
[0,2] / ['a','b']複数をまとめて指定(合併)

対応していない記法

次の3つはこのツールでは使えません。入力すると理由付きのエラーが出ます。黙って空の結果を返すより、書けないと分かるほうが直しやすいためです。

結果の並び順

..先頭から深さ優先でたどります。上のサンプルで $..price を評価すると 8.95, 12.99, 8.99, 22.99, 19.95 の順に出ます。book 配列が bicycle より先に書かれているので、bicycle の 19.95 が最後です。JSONの記述順がそのまま結果の順になる、と考えて問題ありません。

評価はすべてブラウザ内のJavaScriptで行っています。貼り付けたJSONがサーバーへ送られることはありません。記法の出典は Stefan Goessner の JSONPath(https://goessner.net/articles/JsonPath/ )です。

よくある質問(FAQ)

JSONPath と JSON Pointer は何が違いますか?

JSON Pointer(RFC 6901)は1つの値を正確に指す仕組みで、/store/book/0/title のように書きます。ワイルドカードもフィルタもありません。JSONPath は複数の値をまとめて取り出すための記法で、$..price のように「どこにあっても全部」という指定ができます。1点を指すなら Pointer、条件で抜き出すなら JSONPath です。

$..key の .. は何をしていますか?

再帰下降といって、その位置から下のすべての階層を順に見て、key を持つ要素をすべて拾います。深さが分からないデータや、同じキーが複数の階層に散らばっているデータで使います。件数が想定より多いときは、拾いすぎていないかを結果のパス列で確認してください。

フィルタで文字列を比較するときの書き方は?

シングルクォートかダブルクォートで囲みます。$.store.book[?(@.category == 'fiction')] のように書きます。クォートを付けないと数値やキーワードとして解釈され、エラーになります。

貼り付けたJSONはサーバーに送られますか?

いいえ。JSONの解析もJSONPathの評価も、すべてブラウザ内のJavaScriptで行っています。本番データを貼っても外部には出ません。