jqコマンドの使い方
はじめに
jq
コマンドの使い方についてのメモ。
環境
$ hostnamectl status
Static hostname: ---
Icon name: computer-vm
Chassis: vm
Machine ID: ---
Boot ID: ---
Virtualization: kvm
Operating System: Ubuntu 20.04.2 LTS
Kernel: Linux 5.4.0-72-generic
Architecture: x86-64
./jq について
jq
はコマンドラインでJSONを操作するためのコマンドで、執筆時に Ubuntu 20.04
でインストールできる jq
は下記バージョンだった。
$ jq --version
jq-1.6
jq
コマンドがインストールされていない場合は、以下を実行。
$ sudo apt -y install jq
利用方法
1. 整形
以下のようなJSONがあった場合、正直見にくい。
{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}
そんな場合は、jq
コマンドを利用することで改行されて見やすくすることができる。
$ echo '{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}' | jq .
{
"records": [
{
"id": 1,
"name": "一郎"
},
{
"id": 2,
"name": "二郎"
},
{
"id": 3,
"name": "三郎"
},
{
"id": 4,
"name": "四郎"
},
{
"id": 5,
"name": "五郎"
}
]
}
2. 絞り込み
JSONから「records」の中身を抽出したい場合。
$ echo '{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}' | jq .records[]
{
"id": 1,
"name": "一郎"
}
{
"id": 2,
"name": "二郎"
}
{
"id": 3,
"name": "三郎"
}
{
"id": 4,
"name": "四郎"
}
{
"id": 5,
"name": "五郎"
}
JSONの配列から2つ目の要素を抽出したい場合。(要素は0が最初)
$ echo '{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}' | jq .records[1]
{
"id": 2,
"name": "二郎"
}
JSONの配列の要素から「name」だけ、全て抽出したい場合。
$ echo '{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}' | jq .records[].name
"一郎"
"二郎"
"三郎"
"四郎"
"五郎"
JSONの配列の要素から「id」が「3」以上のものだけ、全て抽出したい場合。
$ echo '{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}' | jq '.records | map(select( .["id"] > 3))'
[
{
"id": 4,
"name": "四郎"
},
{
"id": 5,
"name": "五郎"
}
]
JSONの配列の要素から「name」が「二郎」のものだけ、抽出したい場合。
$ echo '{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}' | jq '.records | map(select(.["name"] == "二郎"))'
[
{
"id": 2,
"name": "二郎"
}
]
3. 要素を数える
jq
コマンドを使うことで、配列の要素数を簡単に数えることができる。
$ echo '{"records": [{"id": 1, "name":"一郎"},{"id": 2, "name":"二郎"},{"id": 3, "name":"三郎"},{"id": 4, "name":"四郎"},{"id": 5,"name":"五郎"}]}' | jq '.records | length'
5
About
関西在住のエンジニア
言語: Ruby・Go・PHP
フレームワーク: RoR・Gin
趣味: 自作PC