jq 更新子串匹配对象

jq update substring matched object

Json 文件:

{
  "A": "jack",
  "B": [
    {
      "name": "jack/jil",
      "version": "0.1"
    },
    {
      "name": "went/well",
      "version": "1.2"
    }
  ]
}

现在我需要更新每个对象版本:“$version-dev”,其中名称从 jack 开始,同时保持 json 的其余部分完好无损。

我能得到的最接近的。

jq '.B[] |  select(.name|test("jack.")) | .version += "-dev"' old.json > new.json

在上面的命令中,我只得到 new.json 中具有更新值的特定对象,但我也需要整个 json。 任何建议

您需要用括号括起要更新的整个选择:(… | .version) += …

jq '(.B[] | select(.name|test("jack.")) | .version) += "-dev"' old.json > new.json
{
  "A": "jack",
  "B": [
    {
      "name": "jack/jil",
      "version": "0.1-dev"
    },
    {
      "name": "went/well",
      "version": "1.2"
    }
  ]
}

Demo