使用JQ将值替换为同一字典中的另一个值

时间:2016-08-09 21:33:35

标签: jq

给出以下JSON文件foo.js(为清晰起见而剥离):

{"a":{"b":[{"x":{"x1":1},"y":{"y1":5}},{"x":{"x1":1},"y":{"y1":6}}]}}

我想用x1的相应值替换x1的值。也就是说,我想最终得到:

{"a":{"b":[{"x":{"x1":5},"y":{"y1":5}},{"x":{"x1":6},"y":{"y1":6}}]}}

这会替换值,但只返回修改后的字典而不是完整的JSON文件:

% jq -Mc '.a.b[] | .x.x1 = .y.y1' foo.js
{"x":{"x1":5},"y":{"y1":5}}
{"x":{"x1":6},"y":{"y1":6}}

这可以用一个常数值替换x1:

% jq -Mc '(.a.b[] | .x.x1) |= 9' foo.js
{"a":{"b":[{"x":{"x1":9},"y":{"y1":5}},{"x":{"x1":9},"y":{"y1":6}}]}}

但是这种使用相同想法的尝试不起作用:

% jq -Mc '(.a.b[] | .x.x1) |= .y.y1' foo.js
jq: error (at foo.js:1): Cannot index number with string "y"

1 个答案:

答案 0 :(得分:5)

你几乎得到了它。使用此:

.a.b[] |= (.x.x1 = .y.y1)

我们希望更新.a.b数组中.x.x1取值.y.y1

的每个项目