jq에서 조건부 서식 사용하기

jq에서 조건부 서식 사용하기

후속작입니다이 문제며칠 전에 제가 물었습니다.

웹 서버의 출력이 있다고 가정해 보겠습니다.

{"status":"OK","result":{"string1":{"variable":0},"string2":[{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX,"tier":"special","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"}]}}

다른 이름으로 저장 response.json하고 " "를 출력으로 원합니다 id. 나는 사용한다 jq -r '.result.string2[].id' response.json.

id이제 내 질문은 jq가 " " if 만 출력하도록 조건을 어떻게 설정할 수 있습니까 tier:"special"?

감사해요!

다음은 시도했지만 오류만 발생한 몇 가지 옵션입니다.

jq -r ' |.result.string2[].id.tier select(== "special") | .id ' responses.json

jq -r '.result.string2[].id | select( has("tier.special") )' responses.json

답변1

jq -r '.result.string2[] | select(.tier == "special").id' responses.json

.id또는 직접 적용되는 바로가기가 없습니다 select().

jq -r '.result.string2[] | select(.tier == "special") | .id' responses.json

배열을 확장하고 string2올바른 tier값을 가진 항목을 하나 이상 선택한 select()다음 id을 선택합니다.

식을 하나씩 작성하고 샘플 문서에서 여러 번 실행하면 됩니다. 먼저 .result반환된 내용을 확인한 다음 .result.string2기다리세요. 이렇게 하면 |표현식에 첫 번째를 넣으려는 시도가 작동하지 않고 .result.string2[].id포함되지 않은 목록이 생성된다는 것을 즉시 알 수 있습니다(따라서 이를 필터링하는 데 tier사용할 수 없음 ).select()tier

또한 질문에 표시된 예제 문서의 값 중 하나 뒤에 큰따옴표가 누락되어 있음을 알 수 있습니다.

관련 정보