jqとは: JSONの中身を取り出したいときに使う
jq is a lightweight and flexible command-line JSON processor.
jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.
使い方
JSON出力をパイプしてcommandでクエリ
<JSON 出力のコマンド> | jq 'command'
- パイプなどでコマンドが 長くなっても1組のクォーテーションの中にいれること。
- クォーテーションはシングルでもダブルでもいい。ほとんどシングルで書かれている(?)。
- テストはjsonに保存して cat tmp.json | jq ... などとするのがよさそう。
--
aws ec2 describe-instances の出力を例にする。
JSONの出だしがこうなっているとする。
全部出力
jq '.'
ドット
ドットで つないで、次のネストへの中のInstancesを選択。さらにStateを選択
jq '.Reservations[0].Instances[].State'
出力例
{
"Code": 0,
"Name": "pending"
}
.Stateをパイプしても同じ結果になる
jq '.Reservations[0].Instances[] | .State'
リスト
jq '.Reservations[]'
と
jq '.Reservations'
の違いに注意。リストの中か、リスト全部が出るかの違い。
jq '.Reservations[0]'
とするとリストの1番め。以下インデックスで選べる。インデックスの結果がなければ空白が返る。
Reservations[].Instances[]
とすると、Reservations[0],...[最後] まで全部に対しての.Instances[] になります。
複数の値を出力
パイプして書きます。 "\(.ValueA) \(.ValueB)"
2つの値の間はコンマなどを入れてもよい
例: EC2インスタンスをdescribeして、InstanceId、tagを出力
aws ec2 describe-instances | jq '.Reservations[].Instances[] | "\(.InstanceId) \(.Tags)"'
例: Lambda全部のFunctionName
(.Functions[] がリスト全部になっていることに注意)
aws lambda list-functions | jq '.Functions[].FunctionName'
例: LambdaでFuncnctionNameとRuntimeを出力
aws lambda list-functions | jq '.Functions[] | "\(.FunctionName) \(.Runtime)" '
0 件のコメント:
コメントを投稿