2016-11-09 58 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 
对象