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

时间:2017-11-13 17:46:55

标签: json bash shell edit jq

您好我想更改每个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"}]'

我该怎么做?谢谢!

2 个答案:

答案 0 :(得分:1)

假设:

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} ]'

答案 1 :(得分:0)

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

.[].fn *= 2

Try it online at jqplay.org