배열이 존재하지 않는 경우 jq를 사용하여 JSON 문서를 구문 분석하는 방법은 무엇입니까?

배열이 존재하지 않는 경우 jq를 사용하여 JSON 문서를 구문 분석하는 방법은 무엇입니까?

다양한 구조의 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 배열을 제공 하거나 배열이 존재하지 않는 경우 빈 배열을 제공합니다.descstatusesstatuses

[.statuses[]?.desc]

여러분도 구경해 보세요”.[]?" 그리고"선택적 개체 식별자 인덱스: .foo?" jq설명서에요.

관련 정보