JSONPath・jq 評価
長く深くネストした JSON から目的のフィールドを一つ探し出す作業は、思っている以上に手間がかかります。このツールは、開発者が日常的に使う二つのクエリ言語を同じ画面にまとめました。JSONPath は「値の抽出」を担当し、$.store.book[*].author のようなパスで必要なノードだけを正確に取り出します。jq は「変換」を担当し、フィルタ・マッピング・集計をパイプでつないでプログラムに近い処理を書けます。左に JSON を貼り、下部のプロンプトに式を入力すると、右側の結果が入力と同時に更新され、いくつヒットしたかもその場で表示されます。既定の JSONPath は読み込み不要で即座に使え、jq は切り替えたときに初めて wasm エンジンを取得します。すべてブラウザー内で完結するため、貼り付けたデータがタブの外に出ることはありません。
- JSONPath と jq の二つのエンジンを同じ画面で切り替え。一方は値の正確な抽出、もう一方はフィルタ・マッピング・集計を担い、単純なフィールド取得から複雑な変換まで網羅
- 入力と同時に結果を評価。JSON でも式でも編集すればわずかな遅延の後すぐ更新され、ヒット件数を明示して「該当なし」と「構文エラー」を取り違えない
- JSON の解析エラーとクエリの構文エラーを別々に表示し、それぞれ入力側か式側かを指し示す。結果をこっそり空や欠けた状態にすることはない
- 既定の JSONPath は読み込み不要で即応答し、jq エンジンは切り替えたときだけ取得してキャッシュ。処理はすべてブラウザー内で完結し、データは端末から出ない
JSONPath・jq 構文チートシート
どちらの構文にも不慣れでも大丈夫です。下の二つの表に、よく使う記号と関数を、その働きと、自分のフィールドに置き換えて使える例とともにまとめました。フィールド名を自分のデータに合わせて変えれば、数分でクエリを書き始められます。
よく使う JSONPath 構文
$ $ @ @.price .name $.store .. $..author * $.store.* [n] $..book[0] [a:b] $..book[0:2] [?(expr)] $..book[?(@.price < 10)] ['a','b'] $..book[0]['title','price'] よく使う jq 構文
. . .foo .store .a.b .store.bicycle.color .[] .store.book[] | .store.book[] | .title select(cond) .store.book[] | select(.price < 10) map(f) .store.book | map(.price) add / length [.store.book[].price] | add sort_by(f) .store.book | sort_by(.price) 概要
クエリツールの価値は、結果をはっきり見せられるか、そしてエラーも同じくらいはっきり見せられるかで決まります。このツールはその両方を軸に作られています。即座の出力、信頼できるヒット件数、そして入力の問題と式の問題をきちんと切り分ける表示です。
- 01
二つのエンジンをそれぞれの得意分野で
JSONPath はパスによる値の抽出が得意で、簡潔な構文をすぐ覚えられます。jq はフィルタ・マッピング・集計・構造の再編までこなす本格的な JSON プロセッサです。同じ画面で切り替えられるので、フィールドの取り出しと複雑な変換でツールを持ち替える必要がありません。
- 02
入力と同時に評価
実行ボタンを押す必要はありません。JSON でも式でも編集すれば、わずかなディレイの後に結果が更新されます。書きながら読めるので、見慣れないペイロードの探索がずっと速くなります。
- 03
信頼できるヒット件数
クエリごとにいくつの値がヒットしたかを表示するので、結果が1件か、複数か、ゼロかが一目で分かります。空の結果は「該当なし」と明示され、推測を強いる空白を残しません。
- 04
階層化されたエラー表示
JSON 自体が解析できないときは入力パネルに、式が間違っているときはエンジンのメッセージ付きでクエリバーに、エラーを紐づけて表示します。両者を分けて示すので、どちら側を直すべきか即座に分かります。
- 05
整形とコンパクトをその場で
結果を複数行にインデントして一層ずつ確認することも、1行にまとめてコードやコマンドにそのまま貼り付けることもできます。ワンタッチで切り替わります。
- 06
再利用とエクスポートをワンクリックで
定番の書店 JSON と、易しいものから高度なものまでの例式がワンクリックで使えます。結果はワンクリックでコピー、または .json ファイルとしてダウンロードして次の工程へ渡せます。
使い方
見慣れない JSON から必要な部分だけへ、数ステップで到達できます。結果とヒット件数は常に目の前にあります。
- 01
左の入力パネルに JSON を貼り付けるか、「サンプル」を押して練習用の書店データを読み込みます。
- 02
下部でクエリ言語を選びます。値の抽出なら JSONPath、絞り込み・計算・再編が要るなら jq に切り替えます。
- 03
クエリバーに式を入力するか、下の例式をクリックして適用すると、右側の結果がヒット件数とともに即座に更新されます。
- 04
「整形/コンパクト」で形を整え、結果をコピーまたは .json としてダウンロードして、コード・スクリプト・メモへ取り込みます。
詳細
結果を信頼でき、扱いやすくするための細部。
- JSONPath は成熟した jsonpath-plus を採用し、再帰的下降・ワイルドカード・フィルタ式・配列スライスといった構文を完全にサポートします。
- jq は公式の jq を WebAssembly にコンパイルしたもので、構文はコマンドラインと完全に一致します。ターミナルで書いたものがそのまま動きます。
- クエリは入力と同時に実行され、実行ボタンも、式を変えてから待たされる遅延もありません。
- JSON の解析エラーとクエリの構文エラーは、元のメッセージ付きでその場に表示され、黙って空や壊れた出力を返すことはありません。
- すべてブラウザー内で動作します。貼り付けた JSON は——API のレスポンスなど機微なデータも含め——アップロードも記録もされず、タブを閉じれば消えます。
活用シーン
一本のクエリが、探し回る時間を大きく節約する場面。
-
API レスポンスのデバッグ
エンドポイントが大量のネストした JSON を返し、あるフィールドがどこにあり値が正しいかを確認したいとき。一本のパスで取り出せるので、エディターで階層を折りたたんで開いて回る必要がありません。
-
データに対する計算
一群のレコードの価格合計、重複を除いた著者一覧、ある配列の長さが必要なとき、一本の jq パイプラインが、使い捨てスクリプトを書くよりずっと速く計算します。
-
式の検証とデバッグ
JSONPath や jq の式をコード・CI スクリプト・ログパイプラインに入れる前に、ここで実データに対して試し、狙ったノードにちょうど一致することを確認します。
-
未知の構造を理解する
ドキュメントのない JSON を受け取ったとき、$.. で再帰的に下降したりワイルドカードで一階層をなめたりして、結果を見ながら書けば、階層とフィールドの分布を素早く把握できます。
関連情報
JSON 自体を整形・検証したいだけなら、JSON フォーマッター を、二つの JSON の差分を比べたいなら、JSON 差分 をお試しください。
JSONPath と jq、それぞれの用途
どちらも JSON を扱いますが、出発点が違います。JSONPath は「クエリ」で、求めたノードを取り出すだけ。jq は「プロセッサ」で、取り出したあとも処理を続けられます。この境界線を理解すれば、毎回どちらを使うべきか分かります。
-
JSONPath:パスで抽出
XPath を手本にしており、欲しいノードを一本のパスで記述します。$ はルート、. は一階層下る操作で、取り出されるのは常に文書内に既にある値であり、書き換えは一切行いません。文書からデータを取り出したいなら、これが最も直接的です。
-
JSONPath の中心となる記号
$ はルートノード、.. は任意の深さまで再帰的に下降、* は同じ階層のすべてに一致するワイルドカード、[?(@.price < 10)] はフィルタ式、[-1:] のようなスライスは位置で切り出します。いくつかの記号を組み合わせれば、抽出のほとんどの要求を満たせます。
-
jq:JSON をストリームとして処理
jq は小さいながらも完結した言語です。JSON をパイプ | を流れる値とみなし、各フィルタが前段の出力を加工します。抽出・絞り込み・形の変更ができ、計算もできます。抽出したあとに何かをしたいときこそ、jq の出番です。
-
よく使う jq の機能
map は配列の各要素を変換し、select は条件で要素を残し、add は合計、unique は重複排除、length は個数、max_by は極値を求めます。パイプでつなげば、JSONPath ではできない集計・再編・要約を一行で表現できます。
-
一方は選び、もう一方は計算する
要するに、値を「見つける」だけなら JSONPath の方が短く直感的、見つけたあとに「絞り込み・計算・形の変更」をするなら jq に任せます。このツールが両者を並べて置いているのは、まさにそのためです。
-
結果が値の集合になる理由
二つのエンジンの出力は本来どちらも「値の集合」です。JSONPath が一致したすべてのノード、jq が流し出す一つ一つの結果です。だからツールは件数を示し、選んだ整形またはコンパクトの形でそれらをまとめて一覧します。
使い方のヒント
クエリを正確かつ効率的に保つ習慣。
- まず「抽出」か「変換」かを見極めます。既存のノードを取り出すだけなら JSONPath、絞り込み・計算・再編が要るなら jq。ツールを取り違えて単純なことを複雑にしないこと。
- 再帰的下降を活用します。JSONPath の .. も jq の .. も階層をまたいで探せるので、構造が不確かなときはパスを一階層ずつ決め打ちするより堅牢で楽です。
- ヒット件数を検算に使います。式を書いたらいくつヒットしたかを確認し、想定と件数がずれていれば、たいていパスか条件が少しずれています。
- コードやコマンドラインに貼るときは結果をコンパクトに、一層ずつ読んで照合したいときはインデント表示を使い分けます。
- ここで検証してから式をコードやスクリプトに落とし込みます。ツールは標準の jsonpath-plus と公式の jq を使っており、挙動は本番と一致します。
制限事項
このツールが行うこと、そして他の工程に委ねること。
- 単一の JSON 文書に対してクエリを実行します。複数ファイルの結合や、URL で参照される外部データの取得は行いません。
- クエリと変換に特化しており、完全な JSON エディターではありません。大きな構造の書き換えや整形は、専用のフォーマッタをお使いください。
- JSONPath の実装は jsonpath-plus の構文に従います。一部の拡張表記は実装によって差があり、ここではツールの結果が基準となります。
- 解析できない JSON は修復せず、ありのままにエラーとして報告します。ひどく壊れた入力から中途半端に正しい結果が出ることはありません。
よくある質問
JSONPath と jq、そしてこのツールの使い方に関するよくある質問。
JSONPath と jq の違いは何ですか。どちらを使うべきですか。
一言でいえば、JSONPath は「抽出」、jq は「処理」です。JSON 文書のある位置からノードを取り出すだけなら、JSONPath のパス構文が最も短く直接的です(例:$.store.book[*].author)。取り出したあとにフィルタ・合計・重複排除・再編などの加工も必要なら、完結した JSON 処理言語である jq が要ります。ツールは両者を同じ画面に置き、必要に応じて切り替えられるようにしています。
コマンドライン版 jq の書き方をそのまま使えますか。
使えます。ここの jq は公式 jq を WebAssembly にコンパイルしたもので、構文はコマンドラインと完全に同一です。パイプ、組み込み関数、select、map、reduce などすべて通常どおり動きます。ターミナルで書いたものを、変更なしでそのまま実行できます。
jq に切り替えると読み込みが入るのはなぜですか。
JSONPath は小さく同期的に動くため既定のエンジンで、ページを開いた瞬間から使えます。jq は約 1MB の WebAssembly エンジンで、jq に初めて切り替えたときだけ取得し、その訪問中はキャッシュされます。こうすることで、JSONPath だけを使う訪問者が jq の読み込みコストを負わずに済みます。
「N 件ヒット」の件数は何を表しますか。
現在の式が一致、または生成した値の数です。JSONPath はパスに合うすべてのノードを集合にまとめ、jq は一連の結果値を流し出します。この数字はその個数です。ゼロのときは「該当なし」と表示され、データが本当に無いのか、式を間違えたのかを見分ける助けになります。
私の JSON はどこかにアップロードされますか。
いいえ。解析もクエリもすべてブラウザー内で行われます。貼り付けた JSON も結果も送信・保存されることはなく、タブを閉じれば消えます。ですから API の機微なレスポンスでも安心してここでデバッグできます。
式にエラーがあるのに、前の結果が残るのはなぜですか。
これは意図した設計です。クエリに構文エラーがあるとき、ツールは前回の使えた結果を消さずに、結果エリアへエンジンの元メッセージを表示します。連続して式を調整する間に表示がちらつかず、式が再び正しくなればすぐ結果が戻ります。
JSON が無効なときはどうなりますか。
左側の JSON が解析できない場合、ツールは入力パネルの下に具体的な解析エラーを示し、クエリの実行を保留します。解析できないデータに対して一致を語っても意味がないからです。案内に従って JSON を直せば、クエリはすぐ再開します。