🗂
jqコマンドの基本的な利用パターン
jqコマンドとは
jqは、軽量で柔軟なコマンドラインJSONプロセッサです。
JSONデータの加工・整形等の機能があります。
jqコマンドの基本的な利用パータン
JSONデータのハイライト表示
echoコマンド等のJSON出力データはハイライト表示していません。
jq .
にパイプしておくと、コンパクトなJSONデータを整形して表示できます。
ハイライト表示
# コンパクトなJSONデータを整形して表示できます。
$ echo '{"id":1,"name":"john","age": 18}' | jq .
{
"id": 1,
"name": "john",
"age": 18
}
配列から特定のデータの抽出
配列から特定の条件に当てはまるデータを抽出する時、この機能は
あるプロパティの値と一致の条件
cat << EOF | jq '.[] | select( .name | contains("linda"))'
[
{"id": 1,"name": "john","age": 18},
{"id": 2,"name": "linda","age": 28},
{"id": 3,"name": "porter","age": 38}
]
EOF
数字プロパティの比較
cat << EOF | jq '.[] | select( .age < 30)'
[
{"id": 1,"name": "john","age": 18},
{"id": 2,"name": "linda","age": 28},
{"id": 3,"name": "porter","age": 38}
]
EOF
配列要素の増減
配置に要素の追加
echo '["aaa","bbb","ccc"]' | jq '. + ["ddd","eee"]'
配置に要素の削除
オブジェクトのプロパティと値が全一致の場合のみ、JSONオブジェクトを削除します。
echo '["aaa","bbb","ccc"]' | jq '. - ["bbb","eee"]'
マルチJSONファイルのマージ
テストデータ
hoge.json
{
"hoge1": {
"aaa": {
"user": "user_aaa",
"password": "pass_hoge1aaa"
}
},
"hoge2": {
"bbb": {
"user": "user_bbb",
"password": "pass_hoge2bbb"
}
}
}
fuga.json
{
"fuga1": {
"aaa": {
"user": "user_aaa",
"password": "pass_fuga1aaa"
}
},
"fuga2": {
"bbb": {
"user": "user_bbb",
"password": "pass_fuga2bbb"
}
}
}
hoge.jsonとfuga.jsonのJSONデータをマージします。重複データがある場合、あとの方で勝ちます。
マルチJSONファイルのマージ
$ jq -s add hoge.json fuga.json
{
"hoge1": {
"aaa": {
"user": "user_aaa",
"password": "pass_hoge1aaa"
}
},
"hoge2": {
"bbb": {
"user": "user_bbb",
"password": "pass_hoge2bbb"
}
},
"fuga1": {
"aaa": {
"user": "user_aaa",
"password": "pass_fuga1aaa"
}
},
"fuga2": {
"bbb": {
"user": "user_bbb",
"password": "pass_fuga2bbb"
}
}
}
プロパティの値変更
-
プロパティの値更新
echo '{"id":1,"name":"john","age": 18}' | jq '.age = .age + 1'
-
プロパティの追加
echo '{"id":1,"name":"john","age": 18}' | jq '.added = "I am added by jq"'
-
プロパティの削除
echo '{"id":1,"name":"john","age": 18}' | jq '. | del(.age)'
おまけ
jqplayのサイトでリアルタイムでJQコマンドを検証できます。
Discussion