jq如何过滤数组和添加元素

jq How to filter array and add element

我正在尝试使用 jq 将数据添加到下面 json 中的特定元素:

{
  "users": [
    {
      "username": "karim",
      "queue": [
        "default"
      ]
    },
    {
      "username": "admin",
      "queue": [
        "apps",
        "prod"
      ]
    }
  ]
}

我想做的是像这样在用户管理员的队列[]中添加项目

{
  "users": [
    {
      "username": "hive",
      "queue": [
        "default"
      ]
    },
    {
      "username": "admin",
      "queue": [
        "apps",
        "prod",
        "dev"
      ]
    }
  ]
}

这是我使用的命令

jq '.users[] | select(.username == "admin").queue += ["dev"]' file.json

但结果并不如预期

{
  "username": "hive",
  "queue": [
    "default"
  ]
}
{
  "username": "admin",
  "queue": [
    "apps",
    "prod",
    "dev"
  ]
}

为什么用户数组没有出现?我需要将它保留在结果中

通过管道,您可以将上下文向下更改为数组元素,这就是您希望选择的内容。如果你在管道和选择两边加上括号,你将保留分配,因此过滤器的输出在 top-level:

jq '(.users[] | select(.username == "admin")).queue += ["dev"]'
{
  "users": [
    {
      "username": "karim",
      "queue": [
        "default"
      ]
    },
    {
      "username": "admin",
      "queue": [
        "apps",
        "prod",
        "dev"
      ]
    }
  ]
}

Demo