jq コマンド
公式サイト:
ダウンロード
入手:
使い方
参考:
整形された JSON 文字列を見たい時、minify したい時、jq コマンドがとても便利だったという話 | woshidan’s loose leaf
JSON on the Command Line with JQ | George Ornbo
導入
参考:
軽量 JSON パーサー JQ のドキュメント jq Manual をざっくり日本語訳してみました | DevelopersIO
JSON 処理コマンド jq を使ってみた | ユニキャストラボ
jq コマンドが強力すぎてヤバい件 | CUBE SUGAR STORAGE
JSON 処理コマンド jq を使ってみた | ユニキャストラボ
JQ という JSON プロセッサーがすばらしすぎる | シンク株式会社
jq コマンドが実は高性能すぎてビビッた話 – beatsync.net
JSON データを jq コマンドを使ってシュッと加工する | タダケンの Enjoy Tech
入門
参考:
API レスポンス等から欲しい情報だけを抽出する 初級編|DevelopersIO
API レスポンス等から欲しい情報だけを抽出する 中級編|DevelopersIO
API レスポンスから欲しい情報を抽出する 上級編|DevelopersIO
Reshaping JSON with JQ | Programming Historian
整形
参考:
-s / --slurp オプション
プロパティを抜き出してオブジェクトの配列を作る。
$ echo '[ { "a": "1", "b": "2", "c": "3" }, { "a": "4", "b": "5", "c": "6" } ]' \ | jq ".[] | { a, b }" | jq -s "." [ { "a": "1", "b": "2" }, { "a": "4", "b": "5" } ]
オブジェクトをマージする。
$ echo '[ { "a": "1", "b": "2", "c": "3" }, { "d": "4", "e": "5", "f": "6" } ]' \ | jq ".[]" | jq -s "add" { "a": "1", "b": "2", "c": "3", "d": "4", "e": "5", "f": "6" }
参考:
複数の JSON ファイルを JQ を使ってマージする | DevelopersIO
Creating an array from objects? · Issue #684 · stedolan/jq – GitHub
How to merge 2 JSON file using JQ? – Stack Overflow
-r オプション
--raw-output
/-r
:出力が文字列の場合に、引用符を除去して生の文字列を返す。
ドキュメント:
--raw-output – Manual | jq [Official]
参考:
How to convert embedded JSON string to JSON – Unix & Linux Stack Exchange
-S オプション
オブジェクトのプロパティをキーの順序でソートする。
参考:
sorts KEY and VALUES in different way – how can I enumerate them in the same order? – Stack Overflow
JQ should have an option not to sort keys · Issue #1364 · stedolan/jq – GitHub
-n オプション
参考:
JQ を使って平文の JSON をシェルコマンドだけでいい感じにエスケープする | コード日進月歩
reduce
オブジェクトの配列をマージして一つのオブジェクトにまとめる。
$ echo '[ { "a": "1" }, { "b": "2" }, { "c": "3" } ]' \ | jq "reduce .[] as \$obj ( {} ; . + \$obj )" { "a": "1", "b": "2", "c": "3" }
参考:
Merge objects into one · Issue #1016 · stedolan/jq – GitHub
add
参考:
Reducing JSON with JQ – Stack Overflow
del
オブジェクトから指定したプロパティを削除する。
$ echo '{ "a": "1", "b": "2", "c": "3" }' | jq "del(.a)" { "b": "2", "c": "3" }
階層をたどってプロパティを削除する。
$ echo '{ "deep": { "a": "1", "b": "2", "c": "3" } }' \ | jq "del(.deep.a)" { "deep": { "b": "2", "c": "3" } }
参考:
Deleting keys from objects? · Issue #323 · stedolan/jq – GitHub
Removing a key from parent object with JQ – Stack Overflow
map
map
して作成したオブジェクトをマージして一つのオブジェクトにまとめる。
$ echo '[ { "key": "a", "value": "1" }, { "key": "b", "value": "2" } ]' \ | jq "map({ (.key): (.value) }) | add" { "a": "1", "b": "2" }
参考:
QUESTION: A way to concatenate input objects into one · Issue #70 · stedolan/jq – GitHub
プロパティ (文字列) の連結
参考:
Concat 2 fields in JSON using JQ – Stack Overflow
プロパティを追加する
参考:
Add a new element to an existing JSON array using JQ – Stack Overflow
プロパティの値を変更する
|=
+=
-=
*=
/=
%=
//=
=
値を変更する。
$ echo '{ "deep": { "a": "1", "b": "2", "c": "3" } }' | jq ".deep.a |= \"101\"" { "deep": { "a": "101", "b": "2", "c": "3" } }
ドキュメント:
Update-Assignment: |= | jq Manual [Official]
Arithmetic Update-Assignment: +=, -=, *=, /=, %=, //= | jq Manual [Official]
Plain Assignment: = | jq Manual [Official]
Complex Assignments | jq Manual [Official]
keys / values / to_entries
参考:
Handle large JSONs effortlessly with JQ | Leonid Shevtsov
How to use `jq` to obtain the keys – Stack Overflow
print key and value for each entry in an object – Stack Overflow
print key and value for all in sub-object – Unix & Linux Stack Exchange
sort_by
参考:
Sorting JSON by Value with JQ | Big Datums
type
参考:
How to get root keys and key types using JQ – Stack Overflow
@uri
参考:
JQ を使って平文の JSON をシェルコマンドだけでいい感じにエスケープする | コード日進月歩
ビルトイン関数
参考:
as
値に名前を付けて変数として参照する。
... as $variable_name | ...
配列の要素の平均値を計算する。
$ echo "[4,6,8]" \ | jq "length as \$length | add / \$length" 6
ドキュメント:
Variable / Symbolic Binding Operator: … as $identifier | … | jq Manual [Official]
参考:
jq print key and value for all in sub-object – Unix & Linux Stack Exchange
walk
参考:
How to add an object, key / value in a nested JSON tree with arrays – Stack Overflow
数字の文字列キー
数字の文字列キーを扱う際は、明示的に文字列のキーとしてアクセスする。
$ echo '{ "12345": { "foo": "Yay!" } }' | jq -r '.["12345"].foo'
参考:
Getting data from json when key is numerical string – Stack Overflow
大文字小文字を無視して判別したい
参考:
Case-Insensitive Search for Keys Containing String (ajorpheus) – GitHub Gist
case insensitive contains – Stack Overflow
Windows で使う
jq-win64.exe
をダウンロードし、PATH
の通った場所に配置し、jq.exe
にリネームする。- または、Bash で
jq
としてエイリアスを作成する。
動画:
How to Use JQ in Git Bash (Pavan Devarakonda)
参考:
Git Bash で jq コマンドが使えない時の対処方法 – Qiita
Git Bash で jq コマンドを使用するための一番簡単な方法 – Qiita
Windows で jq コマンドを使いたい | サーバーワークスエンジニアブログ
Run jq command in Git Bash – Stack Overflow
How to run JQ from Git Bash? – Stack Overflow
エラー行を無視したい
参考:
jq で JSON パースできない行のエラーを無視する – Qiita
非 JSON の文字列が含まれるファイルに対して jq を使いたい | 理系学生日記
使用例/サンプル
Cookbook – stedolan/jq Wiki – GitHub
FAQ
FAQ – stedolan/jq Wiki – GitHub
ドキュメント
リポジトリ
stedolan/jq: Command-Line JSON Processor – GitHub
まとめ
Tips
ドキュメント:
Advanced Topics – stedolan/jq Wiki – GitHub
リンク:
jq コマンドで覚えておきたい使い方 17個 | 俺的備忘録 なんかいろいろ