jq-替换数组中的某些变量

时间:2018-10-30 19:07:45

标签: json bash jq

此问题是由于nomad behaviour

引起的

我有一个像这样的json:

# cat test.json 
{
  "Name": "test",
  "TaskGroups": [
    {
      "Name": "test1",
      "Count": 1
    },
    {
      "Name": "test2",
      "Count": 1
    },
    {
      "Name": "test3",
      "Count": 1
    },
    {
      "Name": "test4",
      "Count": 1
    },
    {
      "Name": "test5",
      "Count": 1
    }
  ]
}

我需要这样更改它: 1)在我的json前面添加“作业”-我可以使用

# cat test.json | jq '{"Job": .}'

2)将“ Count”变量替换为数组中的多个项目,例如test1和test5,我可以这样做:

# cat test.json | jq ' .TaskGroups[0,4].Count = 0 '

我可以同时运行两个命令,它可以像这样正常运行:

# cat test.json | jq ' .TaskGroups[0,4].Count = 0 | {"Job": .} '

但是我也想搜索我想根据其名称而不是按数组中的数字进行更改的变量。所以我可以做这样的事情:

cat test.json | jq ' .TaskGroups[] | select(.Name == ("test1", "test5")).Count = 0 '

但是因为我列出的是数组,而不是整个json,所以我失去了一些变量和刚刚添加的“ Job:”。或者,我可以将其添加到数组中的每个项目中。 那么如何更改变量名称并同时添加“作业:”呢?

1 个答案:

答案 0 :(得分:0)

您可以使用带有以下语法的|=“ update-assignment”运算符:

(.TaskGroups[] | select(.Name == ("test1", "test5")).Count) |= 0 | {Job : . }

已记录为here

我已经能够在jqplay上成功测试它:https://jqplay.org/s/578mkUAklU