jq에서 조건부 서식 사용 - PowerShell [닫기]

jq에서 조건부 서식 사용 - PowerShell [닫기]

이것은 님의 후속 질문입니다.이 문제이것은 다른 사람이 기여한 것입니다. 웹 서버에서 다음과 같은 출력이 있습니다.

{
    "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"
            }
        ]
    }
}

jq -r '.result.string2[].id' responses.json현재 ID를 추출하여 responses.json파일로 저장하고 있습니다.

id그러나 제 질문은 jq가 if 만 출력하도록 조건을 어떻게 설정합니까 tier: "special"? 입니다. 다음 방법으로 해결하려고 했는데답변이 스레드에서는 다음 두 가지에 대한 별칭이 있습니다.

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

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

내 Windows-PowerShell에서는 작동하지 않는 것 같습니다. 다음과 같은 오류 메시지가 나타납니다.

 jq: error: special/0 is not defined at <top-level>, line 1:
.result.string2[] | select(.tier == special) | .id jq: 1 compile error

답변 해주셔서 감사합니다!

답변1

큰따옴표를 이스케이프 처리해야 합니다. 아마도 powershell은 POSIX 셸처럼 작은따옴표 안에 큰따옴표를 유지하지 않기 때문일 것입니다.

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

관련 정보