Skip to content

jq レシピ 解説

日常で使う jq フィルターを用途別にまとめました:値へのアクセス、フィルターと選択、コレクション操作、値と文字列の変換、新しいオブジェクトや配列への組み替え、パスのその場での更新、ロジックによる分岐、高度な畳み込みに加え、入出力を制御するコマンドラインフラグ。各行はフィルターと、それが生成する結果を対にして示します。

jq はフィルターです:stdin から JSON を読み込み、パイプで区切られた式のパイプラインを実行し、stdout へ JSON を書き出します。ドットが現在の値であり、すべてはその上に構築されます。最も速い学び方は、下のレシピに実際のデータを通して出力を観察することです。jq 'フィルター' file.json または curl ... | jq 'フィルター' として実行します。

リファレンステーブル · 65 項目
65 of 65 rows
アクセス
入力全体を整形して出力します。
キーの値、またはネストしたキーの値。
名前に特殊文字を含むキーの値。
配列の最初の要素(負の数は末尾から数えます)。
配列の各要素、またはオブジェクトの各値を、それぞれ独自の行に出力します。
キーの値、または null。キーが欠けていてもエラーになりません。
フィルターと選択
条件が真なら入力をそのまま出力し、そうでなければ何も出力しません。
配列のすべての要素に expr を適用し、結果を集めます。
オブジェクトの整列済みキー名、または値の配列。
配列または文字列の長さ、またはオブジェクトのキー数。
age が 18 より大きい要素だけを、1 つの配列にします。
コレクション
少なくとも 1 つの要素、またはすべての要素が truthy またはフィルターを通るとき真です。
キー k がオブジェクトに存在するとき真。in はキー側から同じ判定を実行します。
最初の要素、最後の要素、または f の最初の n 個の出力だけ。
配列内の最小値、または最大値。
0 から n までの数値を、それぞれ独立した出力として生成します。
ネストした配列を 1 つの平坦な配列に畳み込みます。
x が入力のどこかに現れるとき真。inside は役割を反転させます。
すべての値に下から順に f を適用し、入力全体を再構築します。
変換
各要素の price フィールドだけを集めた配列。
数値の配列の合計、またはオブジェクトの配列のマージ。
値を文字列へ、または数値形式の文字列を数値へ変換します。
入力を JSON 文字列または base64 としてエンコードします。
小文字に変換した文字列。
文字列
expr の値をテキストの中に織り込んだ文字列。
パターンのすべての一致、または最初の一致だけを s に置き換えます。
文字列を区切り文字で配列に分割する、または配列を 1 つの文字列に連結します。
文字列をパターンで検査する、または一致と名前付きキャプチャを取り出します。
前置辞、または後置辞が存在するときだけ取り除きます。
真または偽:文字列が s で始まる、または s で終わる。
大文字に変換した文字列。
配列を CSV 行、TSV 行、またはクオートされたシェル引数としてエンコードします。
組み替え
入力の id と name フィールドだけを持つ新しいオブジェクト。
すべての item の name からなる配列。
オブジェクトから作った {key, value} オブジェクトの配列。
{key, value} オブジェクトの配列から構築したオブジェクト。
要素を cat フィールドごとに部分配列へグループ化します。
フィールドでソートする、または一意な id ごとに要素を 1 つだけ残します。
更新とパス
キーの値に f を実行して更新します。
キーの値を v で上書きします。
count の値に n をその場で加算します。
配列として与えられたパスの値を読み取り、書き込み、削除します。
制御とロジック
c が真なら a、そうでなければ b。elif で分岐を追加できます。
f を実行し、f が失敗したときはエラーメッセージで g を実行します。
msg を伴うエラーで停止します。try が受け止めない限り。
出力がまったくありません。その分岐は結果から消えます。
真偽値を組み合わせる、または 1 つを反転します。
高度な操作
配列全体を 1 つの累積合計に畳み込みます。
reduce と似ていますが、最後だけでなく各ステップの後の状態を出力します。
次の入力、または残りのすべての入力をフィルターの途中で取り込みます。
値を JSON テキストとして出力する、または JSON テキストを値に戻して解析します。
base64 テキストを元の文字列にデコードします。
構造の深部への代入。足りない階層はその過程で作成します。
null でも false でもなければ a、そうでなければ b(デフォルト値)。
1 つのキーを取り除いた入力。
入力内のすべてのパスをキーの配列として、上から下へ出力します。
変数と CLI
$name をシェル文字列として定義し、フィルター内で使えるようにします。
$name を生の JSON から定義します。数値、真偽値、配列、オブジェクト用です。
$name を JSON ファイルの内容全体として定義します。
文字列の結果をクオートやエスケープなしでそのまま出力します。
各結果をインデントなしで 1 行にコンパクトに出力します。
フィルターを null に対して 1 回だけ実行し、無から出力を組み立てます。
フィルターが実行される前に、入力全体を 1 つの配列へ読み込みます。
最後の出力から終了コードを設定し、シェルスクリプトが結果を判定できるようにします。
フィルター内から読み取る環境変数の値。