JSON

クエリ文字列

JSONからクエリ文字列ツールは何をする?

コードの中でJSON設定を組み立てた — フィルタパラメータ、解析用ペイロード、OAuthのstate — そして今、それをURLに付け足したい。このページがその地味な最後の仕上げを引き受けます。左にJSONを貼ると、右に ?customer=Ava+Chen&status=active&total%5Bgte%5D=49.99&page=2&tag=premium&tag=verified が返ってきて、リンクやfetch呼び出し、Webhook URLにそのまま放り込めます。配列は繰り返しキーに展開され(最近のサーバーがどれも理解する慣習です)、値は適切にパーセントエンコードされ、先頭の ? も付くのでURLにそのまま貼れます。

変換にはブラウザ組み込みの URLSearchParams を使います — これはサーバー側のフレームワークが返ってきたリクエストをパースするのに使うのと同じ部品です。URLSearchParamsはWHATWG URL Standardに従って application/x-www-form-urlencoded 形式の出力を生成し、JSONは RFC 8259 に従って JSON.parse でパースされます。数値とブール値は文字列に変換され(クエリ文字列に型システムはないため)、nullundefined の値はスキップされ、ネストされたオブジェクトは分かりやすいエラーを投げるので、フラット化できます。

すべてはブラウザ内でローカルに実行されます — アップロードなし、サーバー往復なし、ログなし。逆向きの問題があるなら(クエリ文字列があってJSONにしたい場合)、クエリ文字列からJSONへ を使ってください。URL全体をプロトコル、ホスト、パス、検索部分に分解したいなら URLからJSONへ または URLパーサー の方が向いています。ここで使われているパーセントエンコードのルールは RFC 3986 §2.1 で定義されており、より広いURLパースのモデルは MDNのURL API リファレンスにまとまっています。

JSONをクエリ文字列に変換する方法

3ステップ。それぞれがページ上のボタンに対応しています。

1

JSONオブジェクトを貼る

左のパネルにJSONを入れます。トップレベルの値はオブジェクトでなければなりません — 配列やプリミティブはクエリパラメータにきれいにマップできません。サンプル をクリックすると、文字列、数値、角括弧キー、配列を含む現実的なECフィルタのペイロードが入ります。サンプル:

{
  "customer": "Ava Chen",
  "status": "active",
  "total[gte]": "49.99",
  "page": 2,
  "tag": ["premium", "verified"]
}

数値とブール値は文字列に変換されます(クエリ文字列に型はありません)。<code>null</code> と <code>undefined</code> の値はスキップされます — そのままだとURLが散らかるだけだからです。

2

クエリ文字列を読む

右のパネルは入力に合わせて更新されます。上のサンプルからは ?customer=Ava+Chen&status=active&total%5Bgte%5D=49.99&page=2&tag=premium&tag=verified が生成されます。スペースは + になり(form-encodedスタイル — FAQ参照)、角括弧は %5B/%5D になり、tag 配列は2つの別々の tag= パラメータに展開されます。

3

コピーまたはダウンロード

コピー でクエリ文字列をクリップボードに送るか、ダウンロードquerystring.txt として保存します。クリア で入力パネルをリセットします。

実際に使う場面

共有可能なフィルタURLを作る

ダッシュボードでユーザーが顧客、ステータス、日付範囲で注文を絞り込めるとします。状態はコンポーネント内でJSONオブジェクトとして保持されています({customer: "Marco Rivera", status: "active", date_from: "2026-04-01"})。ビューを共有可能にするには、それをURLに付け足すだけ — ここにJSONを貼ってクエリ文字列をコピーすれば終わりです。ECのカテゴリページ、検索結果、状態を持つフィルタなら何にでも応用できます。

WebhookコールバックURLの組み立て

Stripe、GitHub、ほとんどのWebhook送信元はコールバックURLのクエリ文字列にメタデータを置けます。ユーザーを表すJSONオブジェクト({userId: "USR-1001", source: "checkout", flow: "onboarding"})があり、それを https://api.example.com/webhook?... に付け足したい。貼って、コピーして、貼る — 各値を手作業でURLエンコードして、どの文字をエスケープすべきか悩むよりずっと楽です。

OAuthとOpenIDのURL生成

OAuthの認可URLは8〜12個のクエリパラメータからなります:client_idredirect_uriscopestateresponse_type など。先にJSONで組み立てて(きれいに見るため)ここで変換する方が、文字列を連結してエンコードが正しく当たっていることを祈るより速いです。state パラメータにはnonceや戻り先パスが入ることが多く、それらにも独自のエスケープが必要です。

HTTPクライアントでのAPIリクエスト構築

cURL、Postman、あるいはサクッと書いた fetch() でAPIエンドポイントを試すとき、たいていパラメータはドキュメントのJSONスニペットの形をしています。ここで変換してURLに付け、リクエストを投げる。注文ORD-1001の商品フィルタ {"sku": "SKU-101", "include": "variants"} は1回の貼り付けで ?sku=SKU-101&include=variants になります。

よくある質問

なぜスペースが%20ではなく+でエンコードされるの?

出力がform-encoded(application/x-www-form-urlencoded)だからです。これはどのブラウザも送るし、どのサーバーもクエリ文字列で受け取ることを想定している形式です。RFC 3986では技術的にはURIコンポーネント中で %20 が望ましいとされていますが、スペースを + にするform-encodedの慣習はRFC 3986より古く、クエリ文字列が90年代から使ってきた書き方です。最近のサーバーフレームワークはどちらもデコードします — Express、FastAPI、ASP.NET、Spring、Rails、Django、なんでも。どうしても %20 が必要なら、出力に対して .replace(/\+/g, "%20") を一発掛けてください。

配列はどうエンコードされるの?

繰り返しキーに展開されます。{"tag": ["premium", "verified"]}tag=premium&tag=verified になります。これはURLSearchParamsが生成する慣習で、受け側で URLSearchParams.getAll() を使えばきれいに往復します。サーバーが角括弧記法(tag[]=premium&tag[]=verified — PHPやRailsでよくある)を期待するなら、JSONのキーを tag ではなく tag[] にしてください。

JSONにネストされたオブジェクトを入れられる?

いいえ — クエリ文字列は設計上フラットです。ネストされたオブジェクトを見つけるとページが分かりやすいエラーを返すので、フラット化してください。一番よくある回避策は角括弧記法のキーです:{"filter": {"status": "active"}} ではなく {"filter[status]": "active"} と書きます。Rails、PHP、qs.jsのようなフレームワークはサーバー側でこれをネストされたオブジェクトに戻してパースします。あるいは概念的にフラット化するのもアリです:本当の曖昧さがないなら {"status": "active"} で十分です。

nullとundefinedの値はどうなる?

スキップされます。{"customer": "Ava Chen", "status": null}?customer=Ava+Chen&status= ではなく ?customer=Ava+Chen になります。理由:URL中の status= は「空文字列」を意味し、これは「statusなし」とは別の実在する値です。null を空として送ると情報が失われ紛らわしくなります。本当に status= を送りたいなら {"status": ""} を送ってください。

数値とブール値は型を保持する?

いいえ — クエリ文字列は文字列しか運びません。{"page": 2}page=2 になり、{"debug": true}debug=true になります。サーバー側のコードがスキーマを知っていて型に戻す必要があります。これはクエリ文字列(とフォームデータ)の根本です — ワイヤフォーマットには数値の2と文字列の"2"の違いがありません。型付きパラメータが必要なら、リクエストボディにJSONとして入れて送ってください。

キーや値のUnicodeや絵文字はどう扱われる?

きれいに扱われます。URLSearchParamsはバイトをUTF-8でエンコードし、安全集合の外側はパーセントエスケープします。{"name": "中文"}name=%E4%B8%AD%E6%96%87 になり、{"reaction": "🔥"}reaction=%F0%9F%94%A5 になります。受信側ではURLSearchParams(やフレームワークのクエリパーサー)がきちんと戻します。エンコーディング設定をいじる必要はありません — UTF-8がURL Standardで定められているからです。

先頭の?は何のため?

出力をURLにそのまま貼れるようにするためです — https://shop.example.com/orders + ?customer=Ava+Chen&page=2 = 動くURL。すでにクエリ文字列があるURLに付け足すなら、? を外して & を使ってください。入力が空だったり {} だったりすれば、出力も空になります(裸の ? は出ません)。

その他のURL & JSONツール

クエリ文字列の組み立ては1つの操作にすぎません。組み合わせて使えるツールはこちら: