JSONPath クエリ
JSONJSON ドキュメントに JSONPath / jq 形式のクエリを実行し、一致をすべてハイライトします。
リモート URL の取得は行いません。JSON を直接貼り付けてください。
このページの内容
JSONPath テスターとは?#
JSON ドキュメントが小さければ、目で読めます。数千行——API レスポンス、設定ダンプ、依存関係ツリー——になると、目はもう適切な道具ではありません。JSONPath はそうした場面のためのクエリ言語です。「すべての price フィールドをください」「10 未満の本のタイトル」「isbn という名前の、深さに関わらずすべてのノード」を表す、簡潔な式です。
ファイルパスと小さなフィルタ言語の交わりだと考えてください。$.store.book[0].title は、ファイルシステムのパスと同じように、既知の構造を下に歩きます。$..author は「再帰的に降りて、見つけたすべての author を集める」と言います。[?(@.price < 10)] はフィルタです——現在のノードの price が 10 未満の要素だけを残します。@ は常に「今見ているノード」を意味します。
このページは、あなたの JSON に対して JSONPath 式を実行し、すべての一致をリストし、そして最も時間を節約する部分として——整形されたドキュメント上に一致範囲を直接ハイライトします。そのため、あなたの式が思った通りに選択したかどうかがひと目で分かります。フィルタは安全な式パーサーで評価され、コードを実行することはないため、信頼できない塊でも何も実行できません。
使い方#
- 左側の入力ペインに JSON を貼り付けるか、サンプルをクリックして古典的な書店フィクスチャを読み込みます。
- 右側のJSONPathフィールドに JSONPath 式を入力します。よくある出発点:
$.store.book[*].author— 配列のすべての要素のauthor。$..author— 再帰下降: あらゆる場所のすべてのauthor。$.store.book[?(@.price < 10)].title— フィルタ式。$.store.book[?(@.isbn)].isbn— 存在テスト(isbnキーを持つか)。
- フィールドの下の一致リストは結果ごとに 1 エントリで埋まり、その下の全幅JSON プレビューがすべての一致範囲をその場でハイライトします。
- 一致の隣のヘッダーが件数を示します。ゼロ個のノードに一致する式も成功(空のリスト)として報告されます——構文的に壊れた式だけがエラーを示します。
- ツールバーの一致をコピーをクリックして一致した値を JSON 配列として取り出すか、クリアで両ペインをリセットします。
クエリは入力に合わせて発火します。JSON 自体が無効な場合、ステータスバーは直すべき正確な行と列を指し示します。
主な特徴#
- その場のハイライト。 すべての一致した値が整形済みドキュメント上に重ね合わせて表示されるため、30 個のノードを掴む再帰的な
$..も、リストに埋もれることなく瞬時に見えます。 - 安全なフィルタ評価。
[?(@.price < 10)]のような式は、動的コード実行に渡されるのではなく、式評価器によって解析されます——ページは敵対的な入力に対しても CSP セーフを保ちます。 - 「一致なし」と「エラー」の区別。 何も選択しない有効な式はゼロ件として報告され、不正な式だけがエラーとして旗を揚げます。「何も見つからない」と「壊れた」を混同することはありません。
- 一致ごとのポインタ。 各結果は JSON Pointer(例えば
/store/book/2/title)を持ち、ツリー内のどこから値が来たかが正確に分かります。 - 配列としてコピー。 一致した値は、次のステップに渡せるきれいな JSON 配列としてエクスポートされます。
- ローカルのみ。 データはブラウザ内で照会されます。バックエンドもアップロードもありません。
実例#
サンプルを読み込み、安い本のタイトルを見つけるフィルタを実行します。JSONPathフィールドに次を入力します:
$.store.book[?(@.price < 10)].title
一致リストは 2 つのタイトルを返します。フィクスチャの 4 冊のうち 2 冊だけが 10 未満の価格だからです:
[
"Sayings of the Century",
"Moby Dick"
]
JSON プレビューはその 2 つの title 値をその場でハイライトし、他の 2 つが除外された理由も分かります——Sword of Honour(12.99)と The Lord of the Rings(22.99)は閾値を上回っています。存在テストに切り替えて、どの本が ISBN を持つかを見つけます:
$.store.book[?(@.isbn)].isbn
これは 2 つの ISBN 文字列だけを返します。フィルタは実際に isbn キーを持つ要素だけを残すためです——否定すれば「どのレコードがフィールドを欠いているか」を見つけるのに便利なパターンです。
よくある質問#
$ と @ の違いは何ですか?#
$ はドキュメントのルート——あなたが貼り付けた JSON 値全体——です。@ はフィルタ内で検討されている現在のノードです。だから [?(@.price < 10)] では、@ はいまフィルタがテストしている本を指し、そこで $.price と書けばルートに戻り、存在しない最上位の price を探してしまいます。
式が何も一致しません。バグですか?#
おそらく違います。ゼロ個のノードを選択する有効な式は、空の結果を持つ成功したクエリです——例えばサンプルに対する $.store.book[?(@.price > 1000)] は、単に「それほど高い本はない」ことを意味します。ヘッダーはエラーなしで「一致なし」と読みます。式自体が解析不能なときだけ、ページはエラーを報告します。
フィルタはなぜ任意の JavaScript を実行しないのですか?#
フィルタは、比較・ブール演算子・@ 参照を理解する専用の式パーサーで評価され、コードを構築して実行することは決してありません。これは意図的です——完全には信頼できない JSON にツールを向けても安全に保ち、ページをブラウザのコンテンツセキュリティポリシー内に留めるためです。
JSONPath でノードを編集・削除できますか?#
いいえ——これは読み取り専用のクエリツールです。選択して表示はしますが、あなたの JSON を変更することはありません。2 つのドキュメントがどう異なるかを見たい場合は、代わりに /en/json/diff/ ツールを使ってください。