다양한 구조의 JSON 데이터를 제공하는 유틸리티가 있습니다. 배열이 손실되는 경우도 있고 그렇지 않은 경우도 있습니다.
예를 들어, 배열이 누락되면 다음과 같은 일이 발생합니다.
{
"returned": 0,
"total": 0
}
...배열의 경우는 다음과 같습니다.
{
"statuses": [
{
"Ident": "server:11ylb",
"Ident2": "server:",
"desc": "HOSE",
"node": "servA"
},
{
"Ident": "server:11yla",
"Ident2": "server:",
"numberOfRuns": 1,
"desc": "CAR",
"node": "servA"
}
],
"returned": 2,
"total": 2
}
statutes
문제는 배열의 요소가 0일 때 반복하려고 하면 total
오류가 발생한다는 것입니다.
$ utility | jq '.statuses.[]'
jq: error (at <stdin>:4): Cannot iterate over null (null)
입력에서 배열이 누락된 경우 이 오류를 방지하려면 어떻게 해야 합니까?
답변1
statuses
배열을 반복하려면 .statuses[]?
배열이 때때로 존재하지 않을 수도 있다고 생각되면 . 이 표현식 .statuses[]?
은 동일합니다 .statuses | .[]?
. 즉, 값을 추출 statuses
하고 유효한 배열인 경우 해당 값에서 배열 요소 집합을 생성합니다.
jq
예를 들어, 다음 표현식 은 배열의 모든 값을 포함하는 JSON 배열을 제공 하거나 배열이 존재하지 않는 경우 빈 배열을 제공합니다.desc
statuses
statuses
[.statuses[]?.desc]
여러분도 구경해 보세요”.[]?" 그리고"선택적 개체 식별자 인덱스: .foo?" jq
설명서에요.