ラズパイにjqをインストールしてjsonレスポンスを見やすく表示するやり方
※ 当ページには【広告/PR】を含む場合があります。
2020/06/19
jq
jqのインストール
パッケージマネージャからインストールする
Add/Remove Software
jq-1.5
[Apply]
jq
$ jq --version
jq-1.5-1-a5b5cbe
ビルドインストールする
jq-1.6
$ cd /tmp
$ wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-1.6.tar.gz
$ tar xfvz jq-1.6.tar.gz
$ cd jq-1.6
$ ./configure && make && sudo make install
jqの利用例
1. dockerコマンドと併用
docker inspect
#コンテナ名だけを出力したい
$ docker inspect <コンテナ名かID> | jq '.[].Id'
"796c13faa3bef0f3fa4d8c46648c4c20dbc0d0e47e8180826558cd4abd8a4b18"
#状態を取得したい
$ docker inspect <コンテナ名かID> | jq '.[].State'
{
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 751,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-06-07T07:05:16.665703358Z",
"FinishedAt": "2020-06-07T16:04:47.912831598+09:00"
}
#起動状態だけを取得
$ docker inspect <コンテナ名かID> | jq '.[].State.Status'
"running"
#RestartPolicyを検索
$ docker inspect <コンテナ名かID> | jq '.[].HostConfig.RestartPolicy'
{
"Name": "always",
"MaximumRetryCount": 0
}
#Env(環境変数)の中の配列メンバーで最後が数値で終わるもの
$ docker inspect <コンテナ名かID> | jq '.[].Config.Env | .[] | select(test("[0-9]$"))'
"OUTER_DYNAMODB_IP=192.168.0.250"
"NODE_VERSION=10.18.1"
"YARN_VERSION=1.21.1"
#NetworkSetings直下にあるIPを文字をkeyに含むメンバーの値だけを取得
$ docker inspect <コンテナ名かID> | jq '.[] | .["NetworkSettings"] | (keys | .[] | select(test("IP"))) as $ip | .[$ip]'
""
0
""
0
""
""
0
null
null
2. AWS サービスから送信されるJSON RESPONSE
#jqなしの場合
$ curl 'https://hogehoge.execute-api.piyopiyo.amazonaws.com/database_async?code=0000&category=00'
#膨大な何かのデータが詰まった生のレスポンスのデータ文字
[{"date":1588896000000,"category_id":0,"item_id":0,"value":1372930000},{"date":1589155200000,"category_id":0,"item_id":4,"value":1313550000},...,{"date":1592438400000,"category_id":0,"item_id":4,"value":1111220000}]
#整形済みのフォーマットで表示
$ curl 'https://hogehoge.execute-api.piyopiyo.amazonaws.com/database_async?code=0000&category=00' | jq '.'
[
{
"date": 1591574400000,
"category_id": 0,
"item_id": 4,
"value": 1703070000
},
{
"date": 1591660800000,
"category_id": 0,
"item_id": 4,
"value": 1521580000
},
#...
{
"date": 1592438400000,
"category_id": 0,
"item_id": 4,
"value": 1111220000
}
]
#膨大なデータから条件を付けてフィルターした要素のみを再度配列に戻して表示
$ curl 'http://localhost:5985/sdt_async?code=0000&category=00' | jq '.[] | select(.item_id == 3 and .date > 1592179200000)' | jq -s '.'
[
{
"date": 1592265600000,
"category_id": 0,
"item_id": 3,
"value": 22582.21
},
{
"date": 1592352000000,
"category_id": 0,
"item_id": 3,
"value": 22455.76
},
{
"date": 1592438400000,
"category_id": 0,
"item_id": 3,
"value": 22355.46
}
]
まとめ
man jq
playgroud
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー