JSONPath形式の式でJSONを検索
短いパスでデータ文書から値を取り出せます。$.store.books[*].title は本ごとの書名 North と South を、文書に現れる順に返します。何も見つからないパスはエラーではなく空の一覧になります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- パス
- $.store.books[*].title
- 一致
- North, South
直接プロパティ、引用符付きプロパティ、配列インデックス、ワイルドカードに対応する一方、フィルター、再帰下降、スライス、ユニオン、実行可能な式は意図的に拒否します。範囲を明確に限定しているため、デバッグ、テスト、データ確認、軽量な自動処理で予測可能な結果を得られます。
文書の先頭からパスを組み立てる
すべての式は、解析された文書全体を表す<code>$</code>から始めます。オブジェクトの中をたどるには、<code>$.customer.name</code>のように、ピリオドと単純なプロパティ名を追加します。ドット記法の名前は英字またはアンダースコアで始め、その後には英字、数字、アンダースコアを使用できます。
キーに空白、ハイフン、ピリオドなどが含まれる場合は、<code>$['display-name']</code>や<code>$["shipping address"]</code>のように、引用符付きのブラケット記法をお使いください。単一引用符と二重引用符のどちらにも対応し、同じ種類の引用符またはバックスラッシュをエスケープできます。
パスは左から右へ評価され、存在しないプロパティの分岐からは値が返りません。応答には、スカラー値が一つだけ一致する場合でも、必ず<code>matches</code>配列が含まれます。そのため、単一結果、ワイルドカードによる複数結果、空の結果を同じ出力形式で処理できます。
配列要素を選択しワイルドカードを展開します
<code>$.orders[0].id</code>のように、角括弧内へ負でない整数を記述すると、配列の特定位置を選択できます。インデックスは0から始まるため、最初の要素は0です。配列長を超える位置を指定しても一致は返りません。
たとえば<code>$.store.books[*].title</code>は、titleプロパティを持つ各書籍オブジェクトから値を返します。ドット形式の<code>.*</code>にも対応します。ワイルドカードの後にプロパティやインデックスの手順を続けることもできます。
一致しない分岐だけが除外され、ほかの分岐には影響しません。最終的な順序は元文書と探索順に従います。
意図的に非対応としている構文をご確認ください
この機能が実装するのは小さく明確なJSONPath形式の言語であり、すべての方言ではありません。<code>$..name</code>のような再帰下降、<code>$[?(@.price < 10)]</code>のようなフィルター、スライス、ユニオン、負のインデックス、スクリプト式、関数は拒否されます。
これらはライブラリごとに意味が異なり、決定論的なパーサーに適さない評価を許す場合があるためです。一方、対応構文として正しいパスが何も見つけない場合はエラーではなく、空の<code>matches</code>配列を返します。これにより、自動処理は不正な指示と、任意データが存在しない正当な検索を区別できます。
安定した連携のため、開発時にパスを検証し、文書化された範囲を守り、空の結果を許可するか明示的に決めてください。
よくある質問
どのJSONPath機能に対応していますか?
ルート記号、ドット形式のプロパティ、引用符付きブラケットプロパティ、負でない配列インデックス、ワイルドカードに対応します。
パスに一致する値がない場合はどうなりますか?
処理は成功し、空のmatches配列を返します。データがない場合と、パス構文が不正な場合は区別されます。
フィルターや再帰下降を使用できますか?
いいえ。 フィルター、再帰下降、スライス、ユニオン、スクリプト、関数、負のインデックスは拒否されます。
空白やハイフンを含むキーはどう読みますか?
名前を引用符で囲み、角かっこに入れます。たとえば $['display-name'] や $["shipping address"] です。ドットだけの書き方は、英字か下線で始まり、英字、数字、下線だけでできた名前に使えます。
配列の位置は0と1のどちらから数えますか?
0からです。$.orders[0].id は最初の注文を読みます。配列の長さを超える位置はエラーにならず一致なしとなり、負の位置は受け付けません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/json-path-query \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}'const res = await fetch("https://api.kit.forhosting.com/dev2/json-path-query", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/json-path-query",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/json-path-query", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"json":"{\\"store\\":{\\"books\\":[{\\"title\\":\\"North\\",\\"price\\":12},{\\"title\\":\\"South\\",\\"price\\":18}]}}","path":"$.store.books[*].title"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/json-path-query", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.json_path_query",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
このJSONPath形式の検索ツールを使うと、スクリプトの作成、依存関係の導入、コマンドラインの準備を行わずに、JSON文書から値を抽出できます。有効なJSONを貼り付け、ルート記号から始まるパスを入力すると、一致した値が順序どおりの配列で返されます。
JSONのルートからパスを組み立てます
ルート式だけを指定することもでき、その場合はJSON値全体が唯一の一致として返されます。
配列要素を選択しワイルドカードを展開します
<code>[*]</code>を使うと配列の全要素を展開でき、その後にパスを続けて各要素のフィールドを読み取れます。オブジェクトに対するワイルドカードは標準的なJSONプロパティ順で値をたどり、配列では先頭から末尾へ進みます。文字列、数値、オブジェクト、配列、真偽値、nullは変換されず、元のJSON型のまま返されます。
意図的に非対応としている構文をご確認ください
未対応の式には、構文上の問題を示すメッセージ付きの<code>invalid_input</code>エラーが返され、途中まで有効なパスとして扱われることはありません。不正なJSONは探索開始前に別途拒否されます。API料金は1回あたり$0.002からで、ブラウザーでも同じ決定論的ロジックを利用できます。
連携の活用例
API応答を確認します
応答データをデバッグしながら、深く入れ子になった状態、識別子、値の一覧を抽出できます。
安定したテスト検証を作成します
変化する文書全体を比較せず、回帰テストに必要なフィールドだけを選択できます。
軽量な自動処理を準備します
設定、Webhook、エクスポートのJSONから値を取得し、次の決定論的な工程へ渡せます。
技術的な質問
一致した値は文字列に変換されますか?
いいえ。数値、真偽値、null、オブジェクト、配列を含め、元のJSON型が維持されます。
APIリクエストの料金はいくらですか?
API料金は1回あたり$0.002からです。この機能はブラウザーでも無料で実行できます。