Skip to content

無料 JSONPath テスター — クエリをオンラインで評価

任意の JSON に対して JSONPath 式を即座にテスト。RFC 9535 標準エンジンと Classic(Goessner)モード、Values / Paths / Both ビュー、正規化パス、eval 不使用。100% プライベートでブラウザー内実行、アップロードや登録は不要です。

トラッキングなし ブラウザで動作 無料
すべての評価はブラウザー内でローカルに実行されます。あなたの JSON と式はこのデバイスを離れません。eval なし、アップロードなし。
エンジン
 
JSONPath チートシート
$ルート要素
@現在の要素(フィルター内)
.name子メンバー
..name再帰下降
[*]すべての要素 / メンバー
[0]配列インデックス
[0:2]配列スライス [start:end:step]
[a,b]名前 / インデックスの和集合
[?(@.k>1)]フィルター式
length()RFC 9535 関数: length / count / match / search / value
RFC 9535 文法への忠実性、正規化パスの正確性、一般的なパスでのデュアルエンジンの意味論的一致とエッジケースでの文書化された相違、eval 不使用の安全性(CVE-2024-21534 および CVE-2025-1302 を封じる)、アクセシビリティ(ARIA ロール、radiogroup エンジン切り替え、スクリーンリーダーの結果アナウンス、RTL レイアウト下での LTR JSON 処理)についてレビュー済み。 — Go Tools データツーリングチーム · Jun 13, 2026

JSONPath テスターとは?

JSONPath テスターは、JSONPath 式を書き、JSON ドキュメントを貼り付け、その式がどのノードを選択するか(一致した値とその正確な位置の両方)を、コードを書いたりスクリプトを実行したりせずに正確に確認できるツールです。開発者にとっては、ループを数分からミリ秒へと短縮します。パスを調整し、結果が変わるのを見て、自信を持ってクエリを出荷できます。

JSONPath は JSON 向けのクエリ言語で、XML 向けの XPath に対応する JSON 版です。式は小さなセレクターのアルファベットから構成されます。$ はドキュメントのルートです。ドットまたはブラケットは子に踏み込みます。$.store または $['store']。二重ドット .. は再帰下降で、ツリーのあらゆる階層を検索します。ワイルドカード * はすべての要素やメンバーを選択します。ブラケットは配列インデックス([0])、スライス([start:end:step])、和集合([a,b])、フィルター式([?(@.price < 10)]、ここで @ はテスト中の要素)を担います。これらの部品を使って、深くネストした API レスポンスから単一のフィールドを取り出したり、テストで値をアサートしたり、Kubernetes、AWS Step Functions、Azure Logic Apps のようなシステムでデータ変換を駆動したり、不規則な JSON から構造化データを抽出したりできます。すべて命令的なトラバーサルコードなしでです。JSONPath は実装間で不一致なことでも有名で、それこそが優れたテスターが本番に届く前に明らかにする問題です。

本テスターは 2 つのエンジンを搭載しています。デフォルトは RFC 9535 エンジンです。RFC 9535 は IETF の 2024 年 2 月の JSONPath 正式仕様で、15 年にわたる実装の食い違いの後、言語が初めて厳密に標準化されたものです。厳密な文法、結果の正規化パスという概念、5 つの標準関数 length()、count()、match()、search()、value() を定義します。当社の RFC 9535 エンジンは eval を使わない依存ゼロの実装で、式を JavaScript にコンパイルするのではなく独自の文法で解析・解釈します。2 つ目のエンジンは Classic(Goessner)で、ほとんどの古いオンラインツールやライブラリが実装する事実上の 2007 年方言です。jsonpath.com のようなツールの結果を再現したり、レガシーコードからコピーした式を実行したりするには、これに切り替えてください。2 つの方言は一般的なパスでは一致しますが、エッジケース(フィルターの空白とクォート、和集合の順序、欠損メンバーの比較方法、存在する関数)では食い違うので、1 か所でそれらを切り替えられることが、式が期待と異なる振る舞いをする理由を診断する最速の方法です。

テスターが生の値を超えて明らかにするもの:JSONPath クエリの結果はノードリストで、本ツールはそれを 3 通りに表示できます。Values ビューは一致したノードを JSON 配列として描画し、これはコードで消費するものとまったく同じです。Paths ビューは各一致の正規化パスを描画します。$['store']['book'][0]['title'] のような正規かつブラケットでクォートされた位置で、式がどう書かれたかに関係なく、値がドキュメント内のどこにあるかを一意に識別します。同じノードを選択する 2 つの式は同じ正規化パスを生むので、Paths ビューはデバッグに非常に有用です。Both ビューは値とパスを並べて表示します。統計行は何ノードが一致したかを報告します。

セキュリティはここで第一級の関心事です。多くのオンライン JSONPath 評価ツールはサーバー上で動くか、JavaScript の eval でフィルター述語を評価するライブラリを組み込んでいます。これは広く使われる JSONPath パッケージで CVE-2024-21534 および CVE-2025-1302 として追跡されたリモートコード実行脆弱性を生んだ設計です。本ツールは eval を一切使いません。RFC 9535 エンジンには eval パスがなく、Classic エンジンは eval を明示的に無効化した、固定された patch 済みリリースの jsonpath-plus 上に構築されています。これは RCE クラスのバグを封じ、unsafe-eval を禁じる厳格な Content-Security-Policy 下でツールを動作させます。すべての評価はローカルです。あなたの JSON と式はページを離れず、ログに記録されず、ディスクに保存されません。記憶されるのはエンジンとビューの設定が localStorage に保持されることだけです。これにより本ツールは、独自仕様の API ペイロード、伏字化したログ、社内設定、そしてサーバー依存のサービスに貼り付けたくないスキーマのあらゆるデータに対して安全です。

JSON の取り回しがあなたの作業なら、本ツールをサイト上の他の JSON ツールと組み合わせてください。JSON フォーマッターで入力を整形・プリティプリントし、JSON 差分で 2 つのドキュメントを比較し、JSON スキーマバリデーターでペイロードをスキーマと照合し、JSON to TypeScriptでサンプルレスポンスを型付きインターフェイスに変換できます。

// The expression you build in this tester maps straight onto the
// RFC 9535 reference library used under the hood.
import { query, paths } from 'jsonpath-rfc9535';

const document = {
  store: {
    book: [
      { title: 'Sayings of the Century', author: 'Nigel Rees', price: 8.95 },
      { title: 'Sword of Honour', author: 'Evelyn Waugh', price: 12.99 },
      { title: 'Moby Dick', author: 'Herman Melville', price: 8.99 },
      { title: 'The Lord of the Rings', author: 'J. R. R. Tolkien', price: 22.99 }
    ]
  }
};

// Values: query(document, path) returns the matched values directly.
const titles = query(document, '$.store.book[*].title');
// → ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

// Filter: books cheaper than 10.
const cheap = query(document, '$.store.book[?(@.price < 10)].title');
// → ['Sayings of the Century', 'Moby Dick']

// Normalized paths: paths(document, path) returns where each match lives.
const authorPaths = paths(document, '$..author');
// → ["$['store']['book'][0]['author']", "$['store']['book'][1]['author']", ...]

// RFC 9535 functions like length() are used INSIDE filters, not as a segment.
const longTitles = query(document, '$.store.book[?length(@.title) > 15]');
// → the two books whose title is longer than 15 characters

主な機能

RFC 9535 標準エンジン(eval 不使用)

デフォルトエンジンは RFC 9535、IETF の 2024 年 JSONPath 正式仕様を実装します。厳密な文法、正規化パス、5 つの標準関数を備えます。依存ゼロで eval を使わず、式を JavaScript にコンパイルするのではなく独自の文法で解析・解釈します。厳格な Content-Security-Policy 下でも動作します。

Classic(Goessner)互換モード

1 つの切り替えで Goessner 互換エンジン(eval を無効にして構築した jsonpath-plus 上に構築)に切り替わるので、jsonpath.com のような古いツールからコピーした式が、そこで見たとおりに振る舞います。RFC 9535 と Classic を切り替えて結果を比較し、なぜパスが方言間で異なる一致をするかを診断できます。

3 つの結果ビュー:Values、Paths、Both

Values は一致したノードを JSON 配列として描画し、コードで消費するものとまったく同じです。Paths は各一致の正規化パス $['store']['book'][0]['title'] を描画します。Both は両者を並べて表示するので、すべての値を正確な位置に対応づけられます。アクティブなビューはセッションをまたいで保持されます。

すべての一致に正規化パス

各結果は正規かつブラケットでクォートされた正規化パスを伴います。式の書き方に関係なくノードの位置を一意に識別する RFC 9535 の方法です。同じノードに当たる 2 つの式は同じ正規化パスを生むので、曖昧なクエリのデバッグが簡単になります。

完全なセレクターサポート

ルート $、現在の要素 @、子 .name、再帰下降 ..name、ワイルドカード [*]、配列インデックス [0]、スライス [start:end:step]、和集合 [a,b]、そして比較・論理演算子を伴うフィルター [?()] 式。組み込みのチートシートがすべてのセレクターを記載するので、調べるためにページを離れる必要がありません。

RFC 9535 関数拡張

式の内部で length()、count()、match()、search()、value() を呼び出します。配列の要素を数えたり、文字列を I-Regexp パターンと照合したり、ネストしたリストのサイズでフィルターしたりできます。これらの標準関数はデフォルトエンジンで利用でき、Classic モードで呼び出すとエンジンを切り替えるよう案内します。

整形、アップロード、例

Format JSON は入力をプリティプリントするので、クエリ前に構造が読めます。Upload は .json または .txt ファイルをブラウザー内で完全に読み込みます。どこにも送信されません。Examples ドロップダウンはサンプルデータに対する既知の正しい出発点の式を読み込むので、パスを適応させる前にエンジンの動作を確認できます。

パーマリンク共有(アップロードなし)

Copy link は JSON、式、エンジン、ビューを URL ハッシュにエンコードします。ブラウザーは URL フラグメントをリクエストで送信しないため、共有リンクは go-tools.org サーバーに触れることなく受信者のマシン上で状態全体を再現します。自己完結的で、協調的なデバッグの監査にも適します。

100% プライベート、ブラウザーのみ

あなたの JSON と式はデバイスを離れません。ネットワークリクエストなし、ログ記録なし、入力内容の分析なし。DevTools → Network で確認してください。記憶されるのはエンジンとビューの設定が localStorage に保持されることだけです。独自仕様のペイロード、伏字化したログ、jsonpath.com に貼り付けたくないあらゆるデータに安全です。

作業済みの例

書店ドキュメントからすべての書籍タイトルを選択する

$.store.book[*].title
["Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings"]

定番の Goessner 書店 JSON を貼り付けて式を入力すると、Values ビューが 4 つすべてのタイトルからなる JSON 配列を返します。Paths に切り替えると、各結果が $['store']['book'][0]['title'] のような正規化パスとして表示されます。ワイルドカード [*] は book 配列のすべての要素を反復し、.title は各要素から 1 つのメンバーを射影します。

フィルター式で価格が 10 未満の書籍を絞り込む

$.store.book[?(@.price < 10)].title
["Sayings of the Century", "Moby Dick"]

フィルターセレクター [?()] は述語が真となる配列要素だけを残します。@ は現在の要素です。書店データ(価格 8.95、12.99、8.99、22.99)に対しては 2 冊が条件に合致します。両エンジンともこの形式を受け入れますが、Classic(Goessner)は同じフィルターを [?(@.price<10)] と書く点に注意してください。古いツールから式をコピーした場合はエンジンを切り替えてください。

再帰下降でツリー全体をたどる

$..author
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]

.. 演算子はドキュメントのあらゆる階層に下降し、ネストの深さに関係なく出現するすべての author メンバーを収集します。再帰下降は、フルパスを書き出さずに、深くネストした構造や不規則な構造から 1 つのフィールドを取り出す最速の方法です。

[start:end:step] で配列をスライスする

$.store.book[0:2].title
["Sayings of the Century", "Sword of Honour"]

配列スライスは Python や JavaScript と同じ半開区間 [start:end] の規約に従います。インデックス 0 からインデックス 2 の手前までを取り、最初の 2 冊が返されます。3 番目のフィールドを追加するとステップになります。$.store.book[::2] は 1 つおきに要素を取得します。終端境界は排他的で、これは Paths ビューが明らかにしてくれる典型的なオフバイワンの落とし穴です。

RFC 9535 の length() 関数でタイトルの長さでフィルターする

$.store.book[?length(@.title) > 15]
[{"title": "Sayings of the Century", "author": "Nigel Rees", "price": 8.95}, {"title": "The Lord of the Rings", "author": "J. R. R. Tolkien", "price": 22.99}]

length() は RFC 9535 の 5 つの標準関数の 1 つで、フィルター式 [?...] の内部でのみ有効です。$.store.book.length() のような単独のパスセグメントとしては決して使えず、RFC 9535 の文法はこれを拒否します(そのセグメント形式は jsonpath-plus の拡張であり、標準の JSONPath ではありません)。ここではフィルターがタイトルの文字数が 15 を超える各書籍を残します。書店データに対しては 15 文字より長いタイトル(例:"Sayings of the Century" や "The Lord of the Rings")が選択され、"Moby Dick" や "Sword of Honour" のような短いものは除外されます。count()、match()、search()、value() も同様にフィルター内で使います。これらの関数は RFC 9535 の機能であり、使用するには標準エンジン(デフォルト)に切り替えてください。Classic(Goessner)モードは実装していません。

名前付きメンバー 2 つの和集合を選択する

$.store.book[0]['title','author']
["Sayings of the Century", "Nigel Rees"]

和集合セレクター [a,b] は 1 つの式で複数の子を集めます。ここでは最初の書籍の title と author の両方を取り出しています。和集合は配列インデックスでも機能し、[0,2] は 1 番目と 3 番目の要素を取得します。Both ビューは各値とその正規化パスを対にして表示するので、どのメンバーがどの結果を生んだかを正確に確認できます。

JSONPath テスターの使い方

  1. 1

    JSON を貼り付けるかアップロードする

    入力ボックスに JSON をドロップ、貼り付け、または Upload をクリックしてディスクから .json / .txt ファイルを読み込みます。Format JSON はドキュメントを再インデントします。不正な JSON は、クエリする前にパーサーメッセージとともにインラインで指摘されます。

  2. 2

    エンジンを選ぶ

    RFC 9535(2024 年の IETF 標準、eval 不使用)がデフォルトです。jsonpath.com のような古いツールからコピーした式を実行していて、そこで見た結果に合わせたいときは Classic(Goessner)に切り替えてください。

  3. 3

    JSONPath 式を入力する

    先頭の $ は表示済みです。.store.book[*].title のような子パス、[0] のようなインデックス、..author のような再帰下降、[?(@.price < 10)] のようなフィルターから始めてください。結果は入力するにつれてライブで更新されます。

  4. 4

    結果ビューを切り替える

    Values は一致した値の JSON 配列を表示します。Paths は各一致の正規化パス($['store']['book'][0]['title'] のような形式)を表示します。Both は両者を並べて表示するので、すべての値をドキュメント内の正確な位置に対応づけられます。

  5. 5

    結果をコピーするかパーマリンクを共有する

    Copy result は出力をクリップボードに置きます。Copy link は JSON、式、エンジン、ビューを URL ハッシュにエンコードする(アップロードなし)ので、同僚が自分のマシン上でローカルに同じクエリを再現できます。

JSONPath のよくある間違い

先頭の $ ルートを忘れた

すべての JSONPath 式はルートから始まり、$ と書きます。これを省く(または $ が暗黙であるかのようにパスを書く)と、ほとんどのエンジンは式を拒否します。テスターは $ を表示するので、次のセレクター(ドット、ブラケット、再帰下降)から入力を始めてください。

✗ 誤り
store.book[*].title  →  invalid (no root)
✓ 正しい
$.store.book[*].title  →  selects every title

オフバイワンのスライス — 終端インデックスが含まれると思っていた

スライスは半開区間です。[start:end] は end の手前まで進みます。[0:2] は 2 要素(インデックス 0 と 1)を返し、3 つではありません。最後の要素をインデックスで含めるには、[start:] を使うか終端境界を 1 つ先まで押し出してください。

✗ 誤り
$.store.book[0:2]  →  first TWO books, not three
✓ 正しい
$.store.book[0:3]  →  first three books (indices 0,1,2)

Classic 式を RFC 9535 エンジンで使った(またはその逆)

jsonpath.com や jsonpath-plus からコピーした式は、フィルター、和集合、関数の違いのために RFC 9535 では異なる解析や一致をするかもしれません。結果がおかしく見えたら、式が書かれた方言に合うようにエンジン切り替えを切り替えてください。

✗ 誤り
Classic filter run under RFC 9535  →  parse error or unexpected nodes
✓ 正しい
Switch engine to Classic (Goessner)  →  reproduces the original result

RFC 9535 関数を単独のセグメントとして呼び出した

length()、count()、match()、search()、value() はフィルター [?...] の内部でのみ有効な RFC 9535 関数拡張です。$.store.book.length() のような単独のセグメント呼び出しは RFC 9535 文法に拒否されます(jsonpath-plus の拡張であり、標準ではありません)。関数はフィルター内で呼び出し、デフォルトの RFC 9535 エンジンを使ってください。Classic(Goessner)エンジンはこれらの関数を実装していません。

✗ 誤り
$.store.book.length()  →  parse error (not a valid RFC 9535 segment)
✓ 正しい
$.store.book[?length(@.title) > 15]  →  books with a title over 15 chars

フィルター式の内部で @ を忘れた

フィルター [?()] の内部では、現在の要素は @ であり $ ではありません。$.price と書くとテスト中の要素ではなくドキュメントルートを指してしまうので、フィルターは何も選択しないか、すべてを選択します。フィルター対象の要素のメンバーを指すには @ を使ってください。

✗ 誤り
$.store.book[?($.price < 10)]  →  wrong scope
✓ 正しい
$.store.book[?(@.price < 10)]  →  books under 10

メンバー名を誤った構文でクォートした

ブラケット表記は文字列キーの周りにクォートが必要です。$['store'] も $.store も機能しますが、$[store](ブラケット内でクォートなし)はインデックス/識別子エラーです。空白、ドット、特殊文字を含むキーには、ブラケット内でクォートを使ってください。$['first name']。

✗ 誤り
$[store][book]  →  invalid bracket selectors
✓ 正しい
$['store']['book']  →  same as $.store.book

再帰下降が最初の階層で止まると思っていた

$..author はトップで止まりません。あらゆる深さのすべての author メンバーを収集します。直接の子だけが欲しいなら、パスを書き出してください。大きなドキュメントに対する再帰下降は、意図よりはるかに多くのノードを返すことがあります。

✗ 誤り
$..price  →  every price anywhere in the tree
✓ 正しい
$.store.book[*].price  →  only book prices

このツールを使う人

API レスポンスからフィールドを抽出する
リクエスト ID、ネストしたリソース属性、名前のリストなどを、トラバーサルコードを書かずに JSON ペイロードから取り出します。ここでサンプルレスポンスに対してパスを構築し、Values ビューで欲しいノードを正確に返すことを確認してから、検証済みの式をアプリケーションやテストに貼り付けます。
統合テストのアサーションを書く
多くのテストフレームワークや契約テストツール(REST Assured、Karate、Postman)は、レスポンスボディをアサートするのに JSONPath を使います。ここでアサーションパスを下書きし、実際のレスポンスに対して正しいノードを選択することを検証して、テストにコピーします。テストスイートが赤くなる前に誤ったパスを捕まえられます。
パイプラインでデータ変換を設定する
Kubernetes、AWS Step Functions、Azure Logic Apps、多くの ETL ツールは、イベントペイロード内のフィールドを指すのに JSONPath を受け入れます。ここで代表的なイベントに対して正確なパスをプロトタイプし、解決することを確認してから、意図したところを指しているという確信を持ってパイプライン設定に組み込みます。
jsonpath.com の結果をプライベートに再現する
サーバー依存の評価ツールからの式があるが、自分のデータを第三者サイトに貼り付けられませんか?Classic(Goessner)モードに切り替えて JSON を読み込み、同じ結果をローカルに再現してください。ペイロードはブラウザーを離れないので、独自仕様のデータはあなたのマシンに留まります。
レガシー式を RFC 9535 へ移行する
RFC 9535 準拠をうたうシステムへ移行しますか?レガシー式を Classic モードで実行してから、RFC 9535 エンジンに切り替えて、まだ解析でき同じノードに一致するかを確認します。デュアルエンジン比較は、さもなければ本番で遭遇するフィルター、和集合、関数の違いを正確に指摘します。
なぜパスが誤ったノードを返すかをデバッグする
多すぎたり少なすぎたりするノードを選択するパスは、値だけからは推論しにくいものです。Paths ビューに切り替えてすべての一致の正規化された位置(正確な配列インデックス、正確なメンバーの連鎖)を見れば、オフバイワンのスライスやはぐれた再帰下降がすぐに明らかになります。
JSONPath を教える、またはレビューする
サンプルデータに対する動く式を開き、Values と Paths を切り替えながらセレクター単位で読み解き、学習者が何が選択され、どこにあるかの両方を見られるようにします。チートシートと作業済みの例は、コードレビューやオンボーディングのための構造化されたリファレンスになります。

エンジンとアルゴリズムのノート

RFC 9535 エンジン(jsonpath-rfc9535、依存ゼロ)
デフォルトエンジンは IETF RFC 9535 文法を直接実装します。式をトークン化して抽象構文木に解析し、ドキュメントに対して解釈します。パスのどこにも eval も Function コンストラクターもないので、eval インジェクションクラスのバグに対して免疫があり、厳格な Content-Security-Policy 下でも動作します。
Classic エンジン(jsonpath-plus、eval 無効)
Classic(Goessner)エンジンは jsonpath-plus で、patch 済みリリース(>= 10.4.0)に固定し、eval オプションを明示的に false に設定して構築されています。これは Goessner 方言の互換性を保ちつつ、ライブラリのデフォルトの eval ベースのフィルターパスに影響した CVE-2024-21534 および CVE-2025-1302 として追跡されたリモートコード実行ベクターを封じます。
正規化パスの生成
すべての一致は RFC 9535 正規化パスとともに報告されます。シングルクォートのブラケット表記($['store']['book'][0]['title'])を使い、配列インデックスは裸の整数で表す正規形です。正規化パスはノードごとに安定かつ一意なので、同等の式は同一のパスを生みます。Paths ビューと Both ビューは曖昧さのない結果識別のためにこれに依存します。
遅延読み込みされるエンジンチャンク
両エンジンは最初に選択されたときにのみ別々の JavaScript チャンクとして読み込まれるので、初期ページは軽量に保たれ、使わないエンジンは決してダウンロードされません。エンジンを切り替えると、ページの再読み込みなしに現在のドキュメントに対して現在の式が即座に再評価されます。
ローカルファイルの読み込みと JSON 整形
Upload ボタンはブラウザーの FileReader API を使い、.json または .txt ファイルを完全にクライアントサイドで入力に読み込みます。ファイルは決して送信されません。Format JSON は入力を 2 スペースインデントで解析・再シリアライズし、整形不良の JSON が評価前に捕まるよう、解析エラーをインラインで表面化します。
URL ハッシュ経由のパーマリンク(決して送信されない)
共有状態は location.hash フラグメントにエンコードされ、JSON、式、アクティブなエンジン、結果ビューを運びます。ブラウザーはフラグメントを HTTP リクエストに含めないため、パーマリンクが開かれても go-tools.org サーバーはデータをまったく受け取りません。ハイドレーションは完全に受信者のデバイス上で行われます。

JSONPath のベストプラクティス

ターゲットに合うエンジンを選ぶ
下流システムが RFC 9535 準拠をうたうなら、RFC 9535 エンジンに対して書き、検証してください。古いツールやライブラリの式を再現または保守しているなら Classic(Goessner)を使ってください。誤った方言に対して検証することは、テスターで動いたパスが本番で失敗する最も一般的な理由です。
値だけでなく Paths ビューで検証する
Values ビューは何が一致したかを教え、Paths ビューはどこかを教えます。クエリが正しそうな値を返しても、誤った位置から選択しているかもしれません。はぐれた再帰下降や広すぎるワイルドカードです。正規化パスを確認して、式が意図したノードに正確に当たることを確かめてください。
スライスの排他的な終端に注意する
[0:2] はインデックス 0 と 1 を選択し、0 から 2 までではありません。終端境界は Python や JavaScript と同様に排他的です。オフバイワンのスライスエラーは最も頻繁な JSONPath バグです。Paths ビューを使って選択された各要素の正確なインデックスを読み、出荷前に境界を確認してください。
可能なら再帰下降より明示的なパスを優先する
$..price は便利ですが、意図しないものも含めてドキュメント内のあらゆる price に一致します。構造が分かっているときはパスを書き出して($.store.book[*].price)、データが増えてもクエリが正確で予測可能なまま保ってください。.. は本当に不規則または未知の形状のために取っておきます。
フィルターでの空白とクォートを一貫させる
RFC 9535 はフィルター式に対して文法に正確に従いますが、従来の方言はよりゆるいです。文字列リテラルはシングルクォート('fiction')でクォートし、演算子は間隔を空け、寛容な解析に依存しないなど、フィルターをきれいに書いてください。そうすれば、最終的にどのエンジンやライブラリが実行しても同じ式が同じように評価されます。

よくある質問

私の JSON や JSONPath 式はサーバーに送信されますか?
いいえ。すべての評価はブラウザー内の JavaScript で実行されます。あなたの JSON ドキュメントと JSONPath 式は、アップロードもログ記録もディスク保存もされず、いかなる第三者にも送信されません。保存されるのは UI 設定だけ、つまりアクティブなエンジン(RFC 9535 または Classic)と結果ビュー(Values / Paths / Both)が localStorage に保存され、次回訪問時に記憶されます。JSON と式そのものは決して永続化されません。DevTools → Network を開いて確認できます。どちらのボックスに入力してもリクエストはゼロです。これにより本ツールは、独自仕様の API ペイロード、伏字化したログサンプル、社内設定など、jsonpath.com のようなサーバー依存の評価ツールに貼り付けたくないものに対して安全です。
JSONPath とは何で、何に使われますか?
JSONPath は JSON 向けのクエリ言語で、XPath が XML 向けのクエリ言語であるのと同じ関係にあります。パス式(例:$.store.book[*].author)を書くと、評価ツールがそのパスが選択するドキュメント内のすべての値を返します。API レスポンスから特定のフィールドを取り出す、統合テストで値をアサートする、Jenkins・Kubernetes・AWS Step Functions・Azure Logic Apps のようなツールでデータ変換を設定する、命令的なトラバーサルコードを書かずに大きく不規則な JSON からデータを抽出する、といった用途に使われます。式はセレクターの軸から構成されます。$(ルート)、. または [](子アクセス)、..(再帰下降)、*(ワイルドカード)、[start:end:step](配列スライス)、[a,b](和集合)、[?()](フィルター)です。本テスターは式をライブで評価し、一致した値とその正規化パスの両方を表示します。
RFC 9535 と従来の Goessner 構文の違いは何ですか?
Classic JSONPath は Stefan Goessner が 2007 年に公開した事実上の構文です。広く実装されましたが正式に標準化されることはなかったため、フィルターの書き方、和集合やルート関数の動作、欠損値の比較方法といった微妙な挙動がライブラリ間で食い違いました。RFC 9535 は IETF が 2024 年 2 月に公開した、JSONPath の初の正式仕様です。厳密な文法を定め、結果の正規化パスを定義し、標準関数(length、count、match、search、value)を追加しました。両者は近いものの同一ではありません。RFC 9535 はフィルター内の空白とクォートにより厳格で、欠損メンバーの比較セマンティクスを定義し、Classic 方言が許容していた一部のゆるい構文を拒否します。本ツールはデフォルトで RFC 9535 エンジン(依存ゼロ・eval 不使用の実装)を使い、後方互換のため Classic(Goessner)エンジンへの切り替えも可能です。
なぜ同じ式が 2 つのエンジンで異なる結果を返すのか、また jsonpath.com からコピーした式はどう使えばよいですか?
RFC 9535 と従来の Goessner 方言は、エッジケースにおいて本当に異なるルールを持つためです。フィルターの空白とクォート、和集合の順序、欠損メンバーの比較方法、存在する関数などです。一方のエンジン向けに書かれた式は、もう一方では異なる一致をしたり(あるいは解析に失敗したり)します。jsonpath.com、jsonpath-plus、Jayway ベースのサービスのような古いツールから式をコピーした場合は、上部のエンジン切り替えを Classic(Goessner)にしてください。そのモードは Goessner 互換の評価ツール(eval を無効にして構築した jsonpath-plus 上に構築)を実行し、元のツールで見た挙動を再現します。新しい式を書く場合や、RFC 9535 準拠をうたうシステムを対象にする場合は、デフォルトの RFC 9535 エンジンのままにしてください。チートシートと組み込みの例は、両エンジンで同一に評価されるよう書かれているので、既知の正しい出発点になります。
フィルター式 [?()] はどのように機能しますか?
フィルターセレクターは、述語が真となる配列要素(またはオブジェクトメンバー)だけを残します。フィルター内では @ がテスト中の現在の要素を指します。$.store.book[?(@.price < 10)] は price メンバーが 10 未満のすべての書籍を返します。リテラルと比較したり(@.isbn、@.category == 'fiction')、&& や || で条件を組み合わせたり、メンバーの存在をテストしたり(@.isbn は isbn を持つ要素を選択)、RFC 9535 では述語内で関数拡張を使ったり(?(length(@.tags) > 2))できます。比較演算子は ==、!=、<、<=、>、>= です。RFC 9535 は型に厳密で、欠損メンバーを値と比較しても明確に定義され、例外を投げません。Classic 方言は空白にゆるく、[?(@.price<10)] と [?(@.price < 10)] の両方が受け入れられますが、RFC 9535 はその文法に正確に従います。
再帰下降(..)は何をしますか?
.. 演算子は直接の子だけでなく、ドキュメントのあらゆる階層を検索します。$..author は、トップレベルオブジェクト内、配列内、ネストしたオブジェクト内、任意の深さで出現するすべての author メンバーを収集します。フルパスを書き出したくない(または書けない)ときに、深くネストした構造や不規則な構造からフィールドを抽出する最速の方法です。.. の後には任意のセレクターを続けられます。$..book[*] はツリー内のあらゆる book 配列のすべての要素を見つけ、$..* はドキュメント内のすべての値を列挙し、$..['price'] はすべての price メンバーを集めます。再帰下降は多数に一致しうるので、Paths ビューに切り替えて、各結果が正規化パスを通じてどこから来たかを正確に確認してください。
RFC 9535 の関数 length()、count()、match()、search()、value() とは何ですか?
RFC 9535 は 5 つの標準関数拡張を定義しており、重要なルールはそれらがフィルター式 [?...] の内部でのみ呼び出せること、単独のパスセグメントとしては決して使えないことです。$.store.book.length() と書くのは有効な RFC 9535 ではなく、標準文法はこれを拒否します(そのセグメント呼び出し形式は jsonpath-plus の拡張であり、仕様の一部ではありません)。length() は文字列・配列・オブジェクトの長さを返すので、サイズでフィルターするのに使います。$.store.book[?length(@.title) > 15] はタイトルが 15 文字より長い書籍を残します。count() はノードリストが含むノード数を返し、これもフィルター内で使います。$.store.book[?(count(@.authors) > 1)]。match() は文字列が値全体に対して正規表現に一致するかをテストし、search() は文字列内のどこかに一致があるかをテストします。どちらも I-Regexp パターンを取ります。value() は単一ノードのノードリストをその値に変換し、比較で使えるようにします。これらの関数は RFC 9535 標準の一部なのでデフォルトエンジンで利用できます。Classic(Goessner)エンジンは実装していません。関数ベースの式が失敗した場合は、フィルター内で呼び出しているか、そしてエンジン切り替えが RFC 9535 に設定されているかを確認してください。
配列スライス [start:end:step] はどのように機能しますか?
スライスは Python や JavaScript と同じ半開区間の規約を使います。[start:end] はインデックス start から end の手前までを選択するので、[0:2] は最初の 2 要素(インデックス 0 と 1)を返します。境界を省略すると端まで進みます。[2:] はインデックス 2 以降、[:3] は最初の 3 つです。負のインデックスは末尾から数えます。[-1:] は最後の要素を選択します。任意の 3 番目のフィールドはステップです。[::2] は 1 つおきに要素を取得し、[::-1] は逆順にします(負のステップをサポートするエンジンの場合)。排他的な終端境界はスライスで最も頻繁に起きるバグで、Paths ビューは選択された各要素の正確なインデックスを表示するので、一目で境界を確認できます。
和集合セレクターとは何で、複数のキーを一度に選択するにはどうしますか?
和集合セレクターは 1 つのブラケット内に複数の名前やインデックスを列挙し、それらすべてを集めます。$['title','author'] はオブジェクトから両方のメンバーを選択し、$.store.book[0,2] は book 配列の 1 番目と 3 番目の要素を選択します。他のセレクターと組み合わせることもできます。$.store.book[*]['title','price'] はすべての書籍の title と price を取り出します。和集合は、オブジェクト全体やワイルドカードではなく、いくつかのフィールドの固定的な射影が欲しいときに便利です。Both ビューは和集合の結果を読むのに最も明快で、選択された各値とその正規化パスを対にするため、どの名前やインデックスが各エントリを生んだかが分かります。
JSONPath クエリとその JSON をリンクで共有できますか?
はい。しかもそのリンクにはサーバーへの往復がありません。アクションバーで Copy link をクリックすると、テスターは JSON、式、アクティブなエンジン、結果ビューを URL ハッシュにエンコードします。リンクを開いた人は誰でも、自分のマシン上でローカルに同じ状態でページを再現します。データはハッシュフラグメントに置かれるため、go-tools.org サーバーには決して送信されず(ブラウザーは HTTP リクエストでフラグメントを送信しません)、当社のアクセスログにも一切現れません。リンクの長さは JSON のサイズとともに増えるので、大きなドキュメントの場合は式だけを共有して受信者に自分のデータを貼り付けてもらうか、Upload ボタンでファイルをローカルに読み込んでください。これにより、ペイロードをバックエンドに晒すことなく、協調的なデバッグに安全なパーマリンクが実現します。
JSON サイズの上限はありますか?
評価はハードな上限ではなくブラウザーのメモリーによって制限されますが、実用的に最適なのは数メガバイトまでのドキュメントで、ほぼあらゆる単一の API レスポンスより十分に大きいサイズです。広いセレクターを伴う非常に大きな配列(数万ノードに対する $..* の再帰ワイルドカード)は、描画に時間のかかる大きな結果セットを生みます。出力を読みやすく保つには式を絞り込んでください。Upload ボタンは .json または .txt ファイルをブラウザー内で完全に読み込みます(どこにも送信されません)。Format JSON は入力を再インデントするので、クエリする前に構造を読めます。マルチメガバイトのデータパイプラインでは、ここで代表的な一部に対して式を検証し、同じパスをアプリケーションコードや jq のような CLI ツールで実行してください。
jsonpath.com との違いと、安全性(eval 不使用)はどうですか?
4 つの違いがあります。(1) プライバシー:jsonpath.com やほとんどのオンライン評価ツールはサーバー上で動くか、JavaScript の eval でフィルターを評価するライブラリを組み込んでいます。本ツールは完全にブラウザー内で動作し、eval を一切使いません。デフォルトの RFC 9535 エンジンは eval パスのない依存ゼロの実装で、Classic(Goessner)エンジンは eval を明示的に無効化したパッチ済みリリースに固定した jsonpath-plus 上に構築されており、CVE-2024-21534 および CVE-2025-1302 として追跡されたリモートコード実行クラスのバグを封じます。これは本ツールが厳格な Content-Security-Policy 下でも動作することを意味します。(2) 標準:本ツールは、レガシーな Goessner 方言だけでなく真の RFC 9535 エンジンを提供する数少ないオンラインテスターの 1 つです。(3) デュアルエンジン:RFC 9535 と Classic を切り替えて結果を比較したり、古いツールからコピーした式を並べて実行したりできます。(4) 言語:インターフェイスは 15 言語で利用できます。手早いレガシー構文チェックだけが必要なら jsonpath.com も依然として使えますが、標準準拠でプライベート、eval 不使用の評価には本ツールがより安全な選択です。
Values、Paths、Both ビューは何を表示しますか?
JSONPath クエリの結果はノードリスト、つまりドキュメント内のノードの集合です。Values ビューはそれらのノードを一致した値の JSON 配列として描画し、これはコードで消費するものとまったく同じです。Paths ビューは代わりに各一致の正規化パスを描画します。$['store']['book'][0]['title'] のような正規かつブラケットでクォートされた位置で、式の書き方に関係なく、値がドキュメント内のどこにあるかを一意に識別します。正規化パスは RFC 9535 の概念で、デバッグに非常に有用です。同じノードを選択する 2 つの異なる式は、同じ正規化パスを生みます。Both ビューは両者を並べて表示するので、各値とその位置を一目で対応づけられます。選択したビューは localStorage を通じてセッションをまたいで保持されます。
オフラインで動作しますか、また Content-Security-Policy についてはどうですか?
どちらもはいです。すべての評価はネットワーク呼び出しなしでブラウザー内で実行されるため、ページがいったん読み込まれれば、オフラインになってもツールは動作し続けます。そして、どちらのエンジンもフィルター式の評価に eval や Function コンストラクターを使わないため、unsafe-eval を禁じる厳格な Content-Security-Policy 下でも動作します。これはセキュリティ意識の高い多くの組織が強制し、eval ベースの JSONPath ライブラリを壊すポリシーです。RFC 9535 エンジンは式を JavaScript にコンパイルするのではなく、独自の文法で解析・解釈します。Classic エンジンは eval を無効にして構成されています。強化された社内環境で JSONPath を評価する必要がある場合、本ツールはポリシーの例外なしにそこで動作するよう設計されています。

Base64エンコーダー&デコーダー

エンコーディングとフォーマット

Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。

Base64 画像変換ツール

エンコーディングとフォーマット

Base64 文字列やデータURIをブラウザ上で画像に戻します。プレビューし、寸法と MIME を確認して、PNG・JPG・GIF・SVG としてダウンロード。アップロード不要。

CSV to JSON 変換ツール

エンコーディングとフォーマット

CSVをブラウザ内で即座にJSONに変換。RFC 4180・型推論・ヘッダー行・大整数安全対応。100%プライベート、アップロード不要。

.env から JSON への変換ツール

エンコーディングとフォーマット

.env ファイルを貼り付けるだけで即座に JSON に変換。データベースのパスワードや API キー、トークンはブラウザから一切出ません。100% プライベート、アップロード不要、無料の dotenv パーサー。

HTML Markdown 変換ツール

エンコーディングとフォーマット

HTML をブラウザ内できれいな Markdown に変換 — GFM のテーブル、タスクリスト、リンク対応。ATX/Setext 見出しとインラインまたは参照リンクを選択。Web コンテンツの移行や LLM への投入に最適。完全プライベートでアップロード不要。

画像 Base64 変換ツール

エンコーディングとフォーマット

画像を Base64 データURIに変換 — PNG・JPG・GIF・WebP・SVG・ICO 対応。HTML・CSS・Markdown・JSON 形式で出力&コピー。完全プライベートでアップロード不要。