jq
コマンド応用編として、整形・検索・CSV 変換の手順を解説します。
それぞれ jq
コマンド単体で完了するため便利に使えます。
jq
コマンドのインストールや基本操作については、下記の記事を参照ください。
⇒ jq コマンドの使い方 基本編
⇒ jq コマンドのインストール手順 (CentOS)
JSON サンプルデータ
今回は、以下の JSON をサンプルデータとして使用します。
{"users":[{"id":1001,"name":"yamada","age":30},{"id":1002,"name":"tanaka","age":25},{"id":1003,"name":"kimura","age":20}]}
整形すると以下の通りです。3人のユーザデータが含まれています。
$ cat json | jq .
{
"users": [
{
"id": 1001,
"name": "yamada",
"age": 30
},
{
"id": 1002,
"name": "tanaka",
"age": 25
},
{
"id": 1003,
"name": "kimura",
"age": 20
}
]
}
JSON の値で絞り込む select 関数
文字列検索
JSON に含まれる値を使って絞り込みが可能です。
.users[]
の中から、名前が tanaka
の項目のみを抽出します。
$ cat json | jq '.users[] | select(.name == "tanaka")'
{
"age": 25,
"name": "tanaka",
"id": 1002
}
.users[]
の後に select(.name =="tanaka")
を入れるのがポイントです。
select(.users.[].name == "tanaka")
と一度に指定すると上手く動きません。
数値比較
30歳未満のユーザを抽出する場合は、以下のコマンドとなります。
$ cat json | jq '.users[] | select(.age < 30)'
{
"age": 25,
"name": "tanaka",
"id": 1002
}
{
"age": 20,
"name": "kimura",
"id": 1003
}
jq コマンドで JSON の値を変更・整形する
JSON に含まれるデータの加減算や、値の上書きといった変更も jq
で行えます。
数値演算
全員の年齢に +1 した上で表示させます。
$ cat json | jq '.users[].age + 1'
31
26
21
文字列上書き
指定したキーの中身(値)を書き換えることができます。
名前が kimura
となっているデータを suzuki
に置き換える例です。
$ cat json | jq '.users[] | select(.name == "kimura") | .name = "suzuki"'
{
"age": 20,
"name": "suzuki",
"id": 1003
}
jq コマンドで JSON を CSV に変換する
jq
コマンドは、JSON を CSV に変換する機能も備えています。
まずは、1行に値が横並びとなるように加工します。
$ cat json | jq '.users[] | [.id,.name,.age]'
[
1001,
"yamada",
30
]
[
1002,
"tanaka",
25
]
[
1003,
"kimura",
20
]
不要な改行を除去するために、-c
オプションを追加します。
$ cat json | jq -c '.users[] | [.id,.name,.age]'
[1001,"yamada",30]
[1002,"tanaka",25]
[1003,"kimura",20]
この状態で @csv
に値を渡すと、CSV として出力されます。
$ cat json | jq -r -c '.users[] | [.id,.name,.age] | @csv'
1001,"yamada",30
1002,"tanaka",25
1003,"kimura",20
まとめ
jq
コマンドの応用編として、絞り込みや CSV 出力の方法を解説しました。
簡単な JSON の加工であれば jq
単体でも対応可能です。
REST API の普及に伴い、JSON を利用する場面も増えてきました。
機会があれば、ぜひ jq
コマンドでの整形・加工をお試しください。
【関連記事】
⇒ jq コマンドの使い方 基本編
⇒ jq コマンドのインストール手順 (CentOS)
⇒ MongoDB のインストール手順 (CentOS)
⇒ 開けないファイルの調査コマンドを解説
⇒ MySQL クエリの整形・CSV 出力方法