jq Playground
jq 1.7.1 をブラウザで実行。-r・-s・-n・--arg・JSON Lines に対応し、出力・stderr・終了コードはコマンドラインと同じ。エラーは位置と原因を表示します。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
例:LINE の Webhook からテキストだけを取り出す
LINE Messaging API の Webhook は destination と events 配列を送ってきます。各イベントには type、source.userId、deliveryContext.isRedelivery(再送かどうか)があり、テキストメッセージなら message.text が入ります(LINE 公式の OpenAPI 定義 webhook.yml)。テキスト・スタンプ・友だち追加が混ざった、次のような本文で試します(ID は架空のものです)。
{"destination":"U4af4980629","events":[
{"type":"message","mode":"active","timestamp":1790900000000,"source":{"type":"user","userId":"U4af4980629a"},"webhookEventId":"01J0EXAMPLE1","deliveryContext":{"isRedelivery":false},"replyToken":"b60d432864f44d079f6d8efe86cf404b","message":{"id":"325708","type":"text","quoteToken":"q3Plxr4AgKd","text":"明日 19 時に 2 名で予約したいです"}},
{"type":"message","mode":"active","timestamp":1790900001000,"source":{"type":"user","userId":"U4af4980629b"},"webhookEventId":"01J0EXAMPLE2","deliveryContext":{"isRedelivery":true},"replyToken":"8cf9239d56244f4197887e939187e19e","message":{"id":"325709","type":"sticker","stickerId":"52002734","packageId":"11537"}},
{"type":"follow","mode":"active","timestamp":1790900002000,"source":{"type":"user","userId":"U4af4980629c"},"webhookEventId":"01J0EXAMPLE3","deliveryContext":{"isRedelivery":false},"replyToken":"1a2b3c"}]}
-c をオンにして次のフィルタを実行すると、再送ではないテキストメッセージだけが 1 行で出ます。
.events[] | select(.type == "message" and .message.type == "text")
| select(.deliveryContext.isRedelivery | not)
| {user: .source.userId, text: .message.text}
{"user":"U4af4980629a","text":"明日 19 時に 2 名で予約したいです"}
キーワードで絞るときは変数を使います。「+ 変数」で kw = 予約 を追加し、-r で .events[].message.text | select(test($kw)) を実行すると「明日 19 時に 2 名で予約したいです」だけが出ます。コマンドライン欄は jq -r --arg kw '予約' '.events[].message.text | select(test($kw))' input.json です。
例:日本語入力の全角記号
日本語入力をオンにしたままフィルタを打つと、| や .、[]、” が全角になりがちです。
.events[]|.message.text に対して jq が返すのは syntax error, unexpected INVALID_CHARACTER, expecting end of file (Unix shell quoting issues?) と終了コード 3 だけで、どの文字かは示しません。このページはフィルタ欄の下に、文字列の外にある全角記号・全角英数字・全角スペース(U+3000)を挙げ、「置き換える」で半角に直します。"東京" のように文字列の中にある全角文字はそのままです。
ターミナルと同じ結果
実行はいつも jq オプション フィルタ input.json と同じで、input.json は入力の末尾に改行を足したものです。テストでは、オプション・変数・JSON Lines・構文エラーと実行時エラー・halt_error・-e・--seq・--stream を含む 71 ケースを、このページのエンジンと jq 1.7.1 のコマンドラインで実行し、stdout・stderr・終了コードをバイト単位で比べています。jq 1.7.1 マニュアルの例 241 個も、環境変数 $PAGER を読む 2 個を除いてすべて一致します。
手元の版は jq --version で確認できます。Ubuntu 24.04(1.7.1-3ubuntu0.24.04)、Debian 13(1.7.1-6)、macOS 27 の /usr/bin/jq(jq-1.7.1-apple と表示)は 1.7.1、Homebrew は 1.8.2 です。1.8.0 の変更点には、trim などの関数追加のほか、ltrimstr が文字列以外でエラーになる、limit に負の数を渡すとエラーになる、-1 as $x | … の結合順が変わる、といった互換性のない変更があります。1.7.1 では、エラーメッセージに列番号が出ません。
大きな整数は書かれたまま出力されますが、計算すると倍精度浮動小数点になります。{"order_id": 9007199254740993} に .order_id, .order_id + 0 を実行すると、1 つ目は 9007199254740993、2 つ目は 9007199254740992 です。
他のツールとの比較(2026-10-02 に実測)
- play.jqlang.org(jq プロジェクト公式の Playground。jqplay.org はここへ転送)はブラウザ内で jq 1.8 を動かします。
trimが使え、入力を含む通信は見当たりませんでした。出力とエラーを一緒に表示し、repeat(1)は約 30 秒で「Operation timed out」になりました。jq 1.8 を使っているならこちらが合います。 - byteflow.tools の jq プレイグラウンド(Bing で「jq オンライン」上位)は、Chromium 152 ではどのフィルタも
Aborted(CompileError: WebAssembly.instantiate(): … violates the following Content Security Policy …)となり、結果が出ませんでした。2 行の JSON Lines は実行前に「Invalid JSON: Unexpected non-whitespace character after JSON at position 8 (line 2 column 1)」で止まります。 - jqkungfu.com はブラウザ内で jq.wasm を動かします。
[{"a":1},2]に.[] | .aを実行すると1だけを表示してエラーを出さず、9007199254740993は9007199254740992になりました。
制限
- 入力以外のファイルは読めません。
--slurpfile、--rawfile、-f、-L、import、include、--args/--jsonargsは使えません。 $ENVとenvは WebAssembly 実行環境の固定値(HOME=/home/web_user)で、あなたの環境変数ではありません。nowやローカル時刻の関数はブラウザの時計を使います。- 2 MB を超える入力は「実行」を押したときだけ動きます。2 MB を超えるファイルはエディタに表示しません。1 MB を超える出力は出力欄では途中までですが、コピーとダウンロードは全体です。
- 10 秒(入力 1 MB ごとに 1 秒追加)を超える実行は止めます。メモリ不足や深すぎる再帰のときはエンジンを再起動します。
- 色付き出力(
-C)はありません。
関連ツール:パスで値を取り出す JSONPath テスター、整形用の JSON フォーマッター、JSON 配列と JSON Lines を変換する JSONL コンバーター、2 つの出力を比べる JSON 差分チェッカー。
FAQ
本物の jq ですか、JavaScript の再実装ですか?
jq 1.7.1 そのものです。公式の C ソースを jq-web 0.6.2 で WebAssembly にコンパイルしたもので、jq オプション フィルタ input.json と同じ形で実行します。テストでは 71 通りのフィルタについて、出力・エラー文・終了コードを jq 1.7.1 のコマンドラインとバイト単位で比べ、jq 1.7.1 マニュアルの例のうち環境変数を読まない 239 個がすべて一致することを確認しています。
なぜ 1.8 ではなく 1.7.1 なのですか?
Ubuntu 24.04、Debian 13、macOS の /usr/bin/jq が 1.7.1 だからです。ここで試したフィルタはそれらのマシンで同じ結果になります。jq 1.8 で追加された trim・ltrim・rtrim・trimstr・toboolean・skip・add/1・@urid を使うと、その旨を表示します。
入力した JSON は送信されますか?
送信されません。jq はこのタブの Web Worker で動きます。通信は初回のエンジン(jq.wasm、圧縮後約 1 MB)の読み込みだけです。共有リンクに入るのはフィルタ・オプション・変数名で、入力と変数の値は入りません。
入力した内容はページに残りますか?
このブラウザにだけ残ります。フィルタ、オプション、変数(名前と値)、手で入力または貼り付けた 40 KB までの入力はこのブラウザに保存され(localStorage)、次にページを開いたときに戻ります。開いたファイルとそれより大きい入力は保存しません。「クリア」を押すと保存済みの入力も消えます。フィルタは書き換えるまで残ります。
どのくらいの大きさまで扱えますか?
ファイルは 200 MB までです。2 MB を超える入力はキー入力ごとには実行しないので「実行」を押してください。出力欄の表示は先頭 1 MB までで、コピーとダウンロードは全体です。10 秒(入力 1 MB ごとに 1 秒追加)を超える実行は止めます。
ここでは動くのにターミナルでエラーになります。
多くは引用符の問題です。「コマンドライン」欄のコマンドをコピーしてください。フィルタをシングルクォートで囲み、中のシングルクォートもエスケープしてあり、bash や zsh でそのまま動きます。PowerShell と cmd.exe は引用符の扱いが違います。jq --version で版も確認してください。