给出以下JSON文件foo.js(为了清楚起见剥离):
{"a":{"b":[{"x":{"x1":1},"y":{"y1":5}},{"x":{"x1":1},"y":{"y1":6}}]}}
Run Code Online (Sandbox Code Playgroud)
我想用x1的相应值替换x1的值.也就是说,我想最终得到:
{"a":{"b":[{"x":{"x1":5},"y":{"y1":5}},{"x":{"x1":6},"y":{"y1":6}}]}}
Run Code Online (Sandbox Code Playgroud)
这将替换值,但仅返回已修改的字典而不是完整的JSON文件:
% jq -Mc '.a.b[] | .x.x1 = .y.y1' foo.js
{"x":{"x1":5},"y":{"y1":5}}
{"x":{"x1":6},"y":{"y1":6}}
Run Code Online (Sandbox Code Playgroud)
这可以用一个常量值替换x1:
% jq -Mc '(.a.b[] | .x.x1) |= 9' foo.js
{"a":{"b":[{"x":{"x1":9},"y":{"y1":5}},{"x":{"x1":9},"y":{"y1":6}}]}}
Run Code Online (Sandbox Code Playgroud)
但是这种使用相同想法的尝试不起作用:
% jq -Mc '(.a.b[] | .x.x1) |= .y.y1' foo.js
jq: error (at foo.js:1): Cannot index number with string "y"
Run Code Online (Sandbox Code Playgroud)
你几乎得到了它.用这个:
.a.b[] |= (.x.x1 = .y.y1)
Run Code Online (Sandbox Code Playgroud)
我们想要更新.a.b
数组中.x.x1
取值的每个项目.y.y1