아래 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
다음은 통화 중인 사람들의 이메일 주소 중 하나를 가져옵니다.첫 번째통화 수준 에스컬레이션 정책은 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
.