2016-11-09 54 views
0

我對JQ查詢結果有問題。原來的JSON看起來是這樣的:用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以字符串形式讀取參數。你會想把它當作一個數字或者id作爲一個字符串。這將是更容易使用--argjson讀取參數作爲JSON:

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

這裏有一個簡單的過濾器來選擇與.ID 2000

.[] 
| if .id == 2000 then . else empty end 
對象