以下のJSONドキュメントでキーに値を持つemail
エントリをどのように取得しますか?level
2
予想される出力は次のとおりです。
[email protected]
どんな提案がありますか?
{
"escalation_policy": {
"on_call": [
{
"level": 2,
"start": "2022-05-25T00:30:00Z",
"end": "2022-05-25T09:30:00Z",
"user": {
"id": "ABOKC",
"name": "Jaavena Dobey",
"email": "[email protected]",
"time_zone": "Tokyo"
}
},
{
"level": 7,
"start": "2022-05-23T01:00:00Z",
"end": "2022-05-30T01:00:00Z",
"user": {
"id": "KLSPSP",
"name": "kosls frank",
"email": "[email protected]",
"time_zone": "Tokyo"
}
},
{
"level": 3,
"start": "2022-05-23T01:00:00Z",
"end": "2022-05-30T01:00:00Z",
"user": {
"id": "SKSPSLSL",
"name": "Smitha Choudhary",
"email": "[email protected]",
"time_zone": "Tokyo"
}
}
]
}
}
答え1
このように、
- オブジェクトの配列を取得します。
- レベル2を選択してください
- 返された配列からユーザーの電子メールを印刷します。
呼び出しと出力、
$ jq ".escalation_policy.on_call[] | select( .level == 2) | .user.email" test.json
"[email protected]"
答え2
以下は、通話中の人のEメールアドレスの1つを取得します。最初通貨レベルのエスカレーションポリシーは2です。
jq -r '.escalation_policy.on_call | map(select(.level == 2))[0].user.email' file
この情報を具体的にリクエストすることはありませんでしたが、次の内容から、次の名前の担当者のメールアドレスを知ることができます。最低 .level
。on_call
配列をソートし、最初のソートされた項目の値を返すことで.user.email
これを行います。
jq -r '.escalation_policy.on_call | sort_by(.level)[0].user.email' file
.start
現在の時刻がタイムスタンプ内にあることを確認することもできます.end
。これを行うには、関連する待機項目のみを選択し、前のように並べ替えます。
jq -r '
.escalation_policy.on_call |
map(select( now > (.start|fromdate) and now < (.end|fromdate) )) |
sort_by(.level)[0].user.email' file
fromdate
関数が期待するものとまったく同じ形式の日付を持つほど幸運なので、これを行うことができますjq
。