用数字乘以 2 更改每个 json 对象 key(fn) 值

Change each json object key(fn) value with number multiplied with 2

您好,我想更改每个 json 对象键值。 JSON -

abc='[{"fn": 1,"name":"raimonds"},{"fn": 2,"name":"john"}]'

现在在 jq 中使用一些过滤器 -

res=$(echo "$abc" | jq 'map(if .fn then . + {"fn":22222} else . end)')

现在如果我回显 $res 它会重新调整 -

'[{"fn": 22222,"name":"raimonds"},{"fn": 22222,"name":"john"}]'

我想将每个 fn 乘以 2 并像这样输出 -

abc='[{"fn": 22222,"name":"raimonds"},{"fn": 44444,"name":"john"}]'

我该怎么做?谢谢!

鉴于:

res='[{"fn": 22222,"name":"raimonds"},{"fn": 22222,"name":"john"}]'

正如 @chepner 指出的那样, 您可以修改过滤器中的对象:

echo "$res" | jq '.[].fn *= 2'

输出:

[
  {
    "fn": 44444,
    "name": "raimonds"
  },
  {
    "fn": 44444,
    "name": "john"
  }
]

我最初的建议是用修改后的 属性 构造对象, 这很快就会变得乏味,而且没有任何优势:

echo "$res" | jq '[ .[] | {fn: (.fn * 2), name: .name} ]'

此过滤器将数组(或另一个对象)中每个对象的 .fn 成员乘以 2,其他成员保持不变。

.[].fn *= 2

Try it online at jqplay.org