후속작입니다이 문제며칠 전에 제가 물었습니다.
웹 서버의 출력이 있다고 가정해 보겠습니다.
{"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
또한 질문에 표시된 예제 문서의 값 중 하나 뒤에 큰따옴표가 누락되어 있음을 알 수 있습니다.