Linux/コマンド/jq

Linux/コマンド/jq

JSON を色々に操作するためのコマンド。レスポンスに JSON を返してくるような AWS のような API を CLI から操作する場合に非常に重宝する。

プログラミング言語を内蔵しているので色々できる。

jq (プログラミング言語) - Wikipedia

jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ ここに非常に詳しく jq の概念が解説されている。

基本

基本的に出力に対して様々な機能があるフィルタをパイプで繋いでいき欲しい出力を得る。 jq は JSON を操作するコマンドではあるのだが入力は JSON でなくともよい。 大きなJSON1個を処理することもあるし、小さなJSONを複数処理することもあるし、JSONではないなにか文字列が列挙されたモノを処理することもあるし、何かの単一値を扱うこともある。

jq は JSON を扱うと考えてしまわないほうがよい。

JSON を標準入力から取る

パイプで取れる

$ cat hoge.json | jq '.'

パイプを通すとどの単位でループするのか

これを把握することが重要になる。

フィルタ

jq は様々な機能があるフィルタをパイプで連結することにより欲しい結果を得ることになる

ここでの説明は jq コマンド自体やシングルクォートは省略する

そのまま出す

ドットは全部に対応するので入力に対して全部出すという意味になる

.

配列をバラバラにする

このような配列に入ったオブジェクトがあったとする

[
    {"name": "ほげ"},
    {"name": "ぴよ"},
    {"name": "ふが"}
]

この記述でこれがバラバラになって3つのJSONとして出力される

.[]

3つの JSON なので一番外のブラケットは無いし、区切りのコンマもない。

{"name": "ほげ"}
{"name": "ぴよ"}
{"name": "ふが"}

サブルーチン

jq ではフィルタ処理とはまったく別にサブルーチン的なモノが定義できる。これにより再帰構造を持つ JSON を操作しやすくなる。

linux/command/jq/start.txt · 最終更新: 2019-08-28 16:29 by ore