使用args在jq中查询

时间:2016-11-09 22:51:10

标签: json bash jq

我的JQ查询结果有问题。原来的json看起来像这样:

[
  {
    "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 个答案:

答案 0 :(得分:2)

类型不匹配,这就是它不选择的原因。 id字段都是数字,但您要与字符串进行比较。 --arg以字符串形式读取参数。您需要将其视为数字或将ID视为字符串。使用--argjson

将参数作为json读取会更容易
$ jq -r --argjson id 2000 'map(select((.read | not) and .id == $id))' file.json

答案 1 :(得分:0)

这是一个使用.id 2000选择对象的简单过滤器。

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