JSONツール

jq Playgroundフィルタを試してスクリプトへ

JSONまたはテキストを入力し、モードを選んで実行。標準出力と終了コードをそのまま確認できます。

jq Playground

JSON/テキスト入力

jqプログラム

結果

表示は5,000文字ずつです。コピーと保存には結果全体を含みます。

入力とプログラムはブラウザーのメモリ内で処理され、履歴は保存されません。

-c -r -j -S -a -e、短縮形の組み合わせと対応する長い形式を使用できます。-s/-R/-nは入力モードで指定します。

jq 1.8.2・ローカルWebAssembly・手動実行

結果が古いため、コピーと保存は無効です。

POSIXシェル用です。入力をinput.jsonとして保存してください。コピーするコマンドに入力データは含まれません。

jq Playgroundは、API応答から必要な項目だけを取り出すプログラムの確認に使えます。元データを残したまま、条件に合うレコードと結果の構造を見比べられます。

jqフィルタの答えは一つの配列とは限りません。JSON入力から複数の値が出たり、何も出なかったりすることがあります。jqチートシートの式を試すときも、この違いが次の処理に影響します。

jq Playgroundを使う理由

独立した値と配列を区別する

.people[] | select(.age >= 18) | .nameは成人の名前を個別に出力します。値の間の改行も残るので、後続コマンドに何が渡るかを確認できます。

三つのレコードを選別し、条件に合う二つを独立した結果として出力する図。

入力全体を意図的に集める

jq Playgroundの-sは、プログラム実行前にJSON入力を一つの配列にまとめます。式を角括弧で囲む方法は現在の入力から出た結果を集めるため、処理の段階が違います。

三つの独立したJSONオブジェクトを一つの配列にまとめる図。

読み込み方と結果の形を合わせる

01

入力モードを決める

JSONモードは連続した複数の値を読みます。-sは配列に集め、-Rは行を文字列にし、-Rsは改行を含む全文を一つの文字列にします。-nでもinputやinputsから入力を読むことはできます。

02

置換を確認してから実行する

ファイル、サンプル、消去はプレビュー後に適用します。一度の取り消しで入力、式、設定、前の結果を復元できます。実行ボタンかCtrl/Cmd+Enterを使い、編集後は再実行してください。

03

終了コードを確認する

ゼロ以外では書き出しを無効にします。-eのfalse、null、出力なしでも同様です。必要なら-eを外して再実行します。コピーしたPOSIXコマンドにはinput.jsonという入力ファイルが必要です。

抽出から構造の組み立てまで

条件とマッピング

selectは条件に合う値を残し、mapは変換結果を配列にします。サンプルでは年齢を数値で比較します。数字を含む文字列は数値とは異なる型です。

実際のjq構文

jq 1.8.2のWASMで、パイプ、reduce、def、再帰、try/catch、正規表現を実行します。よく使う式だけを再現した実装ではありません。ファイルモジュールの持ち込みには対応しません。

文字列と整形の指定

-rで引用符なしの文字列、-jで区切りなし、-cでコンパクトなJSON、-Sでキー順、-aでASCIIエスケープを指定します。対応する長いオプションも使用できます。

出力と診断を分けて確認

空白、先頭のBOM、NULを保持します。debugとstderrは診断欄に表示します。プレビューは5,000文字ずつ増え、書き出し対象は許可された結果全体です。

実行環境と上限

バイト数と時間
入力とファイルはUTF-8で500,000バイト、式は8,000バイト、オプションは256文字までです。読み込みは15秒、実行は3秒で打ち切ります。停止はWorkerを終了します。
メモリと出力
WASMの線形メモリ上限は256 MiBで、ブラウザー全体の上限ではありません。stdoutとstderrの合計は2 MiBまでです。時間、スタック、メモリ、出力上限に達した処理は部分結果を書き出せません。
数値と重複キー
JavaScriptで入力を先に解析しません。変更されない大きな数値は元の表記を維持できる場合がありますが、計算は浮動小数点で丸めが生じます。重複キーは後の値が優先されます。正確な識別子は文字列にしてください。
ゼロ以外の終了
-eでは通常1がfalse/null、4が出力なしを示しますが、halt_errorでも同じコードを返せます。非ゼロ終了では結果と診断を表示したまま、コピー、保存、コマンドコピーを無効にします。出力は途中の可能性があります。
端末との違い
--arg編集、--stream、--seq、モジュールのアップロード、ファイル参照、URL取得、データ付き共有はありません。コマンドはPOSIX用です。環境依存の組み込み関数はWASM側の環境を参照します。

jq Playgroundの質問

jqでJSONオブジェクトの配列を絞り込むには?

サンプルなら.people[] | select(.age >= 18) | .nameを使います。[]が要素を取り出し、selectが条件で絞り、.nameが名前を選びます。一つの配列が必要なら式全体を角括弧で囲みます。

BashでJSONファイルを扱うためにjqの出力から二重引用符を除くには?

出力オプションに-rを指定します。文字列のJSON引用符を除き、文字列内の空白は残します。オブジェクトや配列はJSONのままです。出力の区切りも不要なら-jを使います。

jqのselectの結果を配列として出力するには?

[.people[] | select(.age >= 18)]のように角括弧で囲みます。条件に合う値を集め、一件もなければ空の配列[]になります。出力が全くない状態とは異なります。

複数のJSONオブジェクトを配列にまとめるには?

JSONを収集する-sを選び、.で配列を確認します。複数の配列を連結するなら-sとaddを組み合わせます。オブジェクトの結合は重複キーの扱いが別途必要です。

key = valueのペアをJSONに変換するには?

-Rで行を読み、単純な形式ならsplit("=") | {(.[0]): .[1]}から始めます。キーや値の空白は必要に応じて除きます。値にも等号がある場合は別の分割方法が必要です。

クエリの処理に問題がありましたか?

小さな例で確かめる

jq Playgroundで複数結果とmapの違いを確認し、必要な形を得てからスクリプトへ移しましょう。