用数字乘以 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
您好,我想更改每个 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