本文へスキップ

JSONPathテスター

JSONPath Tester

JSONPathの式を文書に対して実行し、打っているあいだ一致するノードを光らせます。

JSONPathのクエリを文書に対して実行し、選ばれたノードをすべて、それぞれの経路とともに表示します。その前の20年間に生まれた互いに噛み合わない実装ではなく、2024年の標準であるRFC 9535を実装しています。クエリにフィルタが入った瞬間から、その違いが表に出ます。

🔒 ブラウザの中だけで動きますjsonjsonpathquerytest

クエリ

ルートから: その下のどこかで メンバー「book」、そのあと フィルターを通った子、そのあと メンバー「title」。

文書

一致

入力するそばから、ここに結果が出ます。

2024年の標準である RFC 9535 に従っています。その前の二十年ぶんの互換性のない実装ではありません。実際に効いてくる違いはこうです。結果はノードリストなので重複は消えず、.. は子より先に自分のノードを訪れ、存在しないメンバーは別の存在しないメンバーとだけ等しく、複数のノードに一致しうるクエリとの比較は推測ではなく構文エラーになります。match() と search() の中のパターンはブラウザ自身の正規表現エンジンに渡されます。RFC が定める I-Regexp 方言より多くを受け付けます。

使い方

  1. 文書を貼り付けます

    JSONとしてパースできるものなら何でも構いません。クエリはワーカーで走るので、文書が大きくても入力しているあいだページは応答し続けます。

  2. クエリを書くか、例から始めます

    入力欄の下のボタンが、よく必要になる形を押さえています。ワイルドカード、子孫の探索、スライス、フィルタ、正規表現、そして関数です。その上には、いま書いたクエリが何を意味するのかを言葉で説明したものが出ます。

  3. 一致したものを経路とともに読みます

    結果それぞれに、そこへ至る正規化された経路が付くので、期待した場所から出てきたのかを確かめられます。統計の行には、このクエリが単一のもの——多くても1つのノードしか選ばない——かどうかが出ます。JSON Pointerがまさにそれにあたります。

よくある質問

他のツールでは通るクエリが、ここでは通りません

RFC 9535との違いである可能性が高いです。標準は、古い実装が許していたものを取り除きました。`()`の中のスクリプト式、括弧を使う古いフィルタ構文の`$..[?(@.x)]`、そして複数のノードに一致しうるクエリとの比較です。最後のものは、いまでは推測ではなく構文エラーになります。

同じ値が2回出るのはなぜですか

結果が集合ではなくノードのリストだからです。`$..price`が2つの経路をたどって同じノードに届けば、2回並びます。意図した動作です。重複を消すと、それぞれの一致がどこから来たのかという情報が失われます。

`match()`の正規表現は標準のものですか

厳密には違います。RFCはI-Regexpという小さな方言を定めていますが、ここではパターンをブラウザ自身のエンジンに渡していて、そちらのほうが多くを受け付けます。ここで動くパターンが、厳密な実装では拒否されることがあります。本番に入れる前に知っておく価値があります。

文書を書き換えることもできますか

できません。JSONPathは選ぶだけで、書き込みはしません。編集したいなら、ここに出る経路はRFC 6901のポインタなので、そのままJSON Patchに入れられます。このサイトのJSON差分ツールがそのパッチを作ります。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。