2016-11-09 2 views
0

JQ 쿼리 결과에 문제가 있습니다. 원래 JSON은 다음과 같습니다args를 사용하여 jq에서 쿼리

[ 
    { 
    "read": false, 
    "mex": "message 1", 
    "id": 1000 
    }, 
    { 
    "read": false, 
    "mex": "message 2", 
    "id": 2000 
    }, 
    { 
    "read": false, 
    "mex": "message 3", 
    "id": 3000 
    } 

]를

내가 나에게 (예를 들어)를 ID 2000이 기록의 결과를 줄 것이다 쿼리를 원하는 이들 정확한 수 :

다음 쿼리와
{ 
    "read": false, 
    "mex": "message 2", 
    "id": 2000 
} 

빈 레코드 ("[]")

jq "map(select(.read==false))" file.json| jq -r 'map(select(.id==$foo))' --arg foo 2000 

답변

2

유형 승 일치하지 않는 출력 그게 왜 선택하지 않는지입니다. id 필드는 모두 숫자이지만 문자열과 비교합니다. --arg은 매개 변수를 문자열로 읽습니다. 숫자 또는 문자열로 취급하는 것이 좋습니다.

$ jq -r --argjson id 2000 'map(select((.read | not) and .id == $id))' file.json 
0

여기 .ID 2000

.[] 
| if .id == 2000 then . else empty end 
로 개체를 선택하는 간단한 필터 : 단지 --argjson를 사용하여 JSON과 같은 매개 변수를 쉽게 읽을 수 있습니다