JSONパス抽出

JSONを貼り付けて、$.store.book[0].titleのようなパス式を入力して値を抽出します。

結果

JSONとパスを入力して、抽出をクリックしてください。

仕組み

  1. JSONを貼り付け: 入力フィールドにJSONオブジェクトまたは配列を入力します。
  2. JSONPath式を入力: $.store.book[*].authorまたは$.users[?(@.age > 18)]のようなパスを入力して、必要なデータを選択します。
  3. 抽出された結果を表示: 一致する値が出力パネルに瞬時に表示されます。結果をコピーするかエクスポートします。

なぜJSONPath抽出ツールを使うのか?

複雑なAPIレスポンスや深くネストされたJSONで作業する場合、特定の値を手動で抽出するのは遅く、エラーが発生しやすいです。JSONPathはJSONのクエリ言語です, XML用のXPathに似ています。簡潔なパス式を使用して、単一のネストされた値、配列のすべての要素、条件に一致するフィルター済みレコードなど、必要なデータを正確にターゲットにできます。このツールは、コードを書かずにJSONPath探索をインタラクティブにします。

機能

よくある質問

JSONPathとは?

JSONPathはJSONドキュメントのクエリ言語で、XML用のXPathに類似しています。$.users[*].nameのようなパスは、users配列の各オブジェクトのnameフィールドを選択します。APIテスト、データ変換、JSON処理に広く使用されています。

条件によって配列要素をフィルターするには?

フィルター式を使用します: $.items[?(@.price < 50)]は価格が50未満のすべての項目を返します。@記号は、評価される現在の要素を参照します。

再帰検索をサポートしていますか?

はい。..演算子はすべてのレベルで再帰検索を実行します。例えば、$..nameは、ネストの深さに関係なく、JSON構造のどこにあるすべてのnameキーを見つけます。

ブログ投稿からRFC 9535へ:JSONPath標準への17年の道のり

Stefan Gössner2007年2月の単一のブログ投稿でJSONPathを提案し、XPathのアイデアをJSONに適応させました。彼はJavaScriptリファレンス実装を公開し、構文($ルート、ドットおよび角括弧の子オペレータ、再帰的下降のための..、ワイルドカードのための*、配列スライシングのための[start:end:step]、フィルタ式のための[?(...)])をスケッチし、より広いエコシステムが追随しました。実装は急増しました:JavaScript用jsonpath、Java用JsonPath、JSONPath隣接でも独自のjq(Stephen Dolan、2012)、Python用jsonpath-ng、より厳格なライバルのJMESPath(AWS、2014)。問題:すべての実装が漂流しました。フィルタ構文、再帰意味論、regexマッチング、ルート識別子、すべてライブラリ間で微妙に異なりました。Carsten Bormann et al.による2023年の比較研究は、同じ入力に対して41の異なるJSONPath実装をテストし、同じ式に対して41の異なる結果セットを取得しました。IETF JSONPathワーキンググループは2020年にこれを修正するために招集されました。RFC 9535「JSONPath: Query Expressions for JSON」2024年2月に公開され、Gössnerのオリジナル投稿から17年後、JSONPathの最初の正式な標準となりました。RFC 9535は構文を成文化し、正規化された出力形式を定義し、文字列比較のためのUnicode正規化を要求し、適合性テストスイートを追加します。

JSONPath構文チートシート

実世界のクエリのほとんどをカバーする7つのオペレータ:

実際にJSONPathに手を伸ばす場所

噛むミス

JSONPath vs jq vs JMESPath vs JSON Pointer

その他のよくある質問

JSONPathはXPathと同じですか?

それに触発された、同じではない。XPathは1999年にW3CによってXML用に最終化され、JSONPathは2007年にGössnerによって同じアイデアをJSONに持ち込むためにスケッチされた。最大の違い:JSONPathは/の代わりに.[]を使う、JSONPathにはXMLネームスペースや属性の概念がない、JSONPathはずっと後で標準化された(2024 vs 1999)、なので長年それは多くの非互換な実装を持つデファクト構文だった。

なぜ同じJSONPathが異なるツールで異なる結果を出すのか?

JSONPathがRFC 9535(2024年2月)まで標準化されていなかったから。それ以前、すべての実装はフィルタ構文、regexサポート、ルート識別子、エスケープルール、エッジケース(空の配列、欠落キー、フィルタでの型強制)について独自の選択をしていた。2023年のIETFワーキンググループ研究は同じ入力で41の実装をテストし、41の異なる結果セットを得た。RFC 9535は新しい及び更新されたライブラリのためにこれを修正する;古いライブラリは移行するまで分岐する。常に「RFC 9535適合」をライブラリが主張しているか確認する。

JSONPathでJSONを変更できますか、それとも読むだけですか?

RFC 9535はJSONPathを厳密にクエリ言語として定義する:ドキュメントから値を返し、変異しない。JSONを変更するには、JSON Patch(RFC 6902)を使う、これはJSON Pointerパスとadd/remove/replace/copy/move/test操作を使う。一部のライブラリは両方を組み合わせる(例えばJavaScriptのjsonpath-plusにはapply()変異拡張がある)が、それは標準JSONPathではない。

JSONPathはフィルタで正規表現をサポートしますか?

RFC 9535は2つのregex関数を追加した:match(node, regex)は文字列全体にマッチ、search(node, regex)は任意の部分文字列にマッチ。例:$.book[?(match(@.isbn, "^978-"))]。regexフレーバーはI-Regexp(RFC 9485、XMLスキーマregexのプロファイル)、PCREやJavaScript regexではない。古いライブラリはホスト言語のregexフレーバーを使用していたため、regexクエリは特に移植性がない。

このツールを使うときに自分のJSONはどこかに送信されますか?

いいえ。パス評価は完全にブラウザのJavaScriptエンジン内で実行されます。DevToolsでネットワークタブを開いてクエリを実行すると、評価中にアウトバウンドリクエストがゼロ表示されます。シークレット付きのAPI応答、PII付きのデータベースダンプ、または認証情報を含む設定ファイルに対して安全です。

関連ツール

JSONツリービューア 無料の JSON フォーマッタ&バリデータ・オンライン JSON CSVコンバータ JSON比較ツール