我正在尝试使用JQ更改JSON对象中多个字段的值。但是,我想对每个字段执行相同的操作。我做到了,但是我的做法似乎多余。
jq '.fieldOne |= . * 3 | .fieldTwo |= . * 3 | ...'
是否有一种方法可以做到这一点:(不完全是这样,因为JQ不会那样工作)
jq '(.fieldOne | .fieldTwo | ...) |= . * 3'
答案 0 :(得分:2)
由于jq的神奇之处,您可以编写:
(.fieldOne, .fieldTwo) |= .*3
更笼统地说,这是另外两种方法。
# If the input is an object, $fields should be an array of key names
# If the input is an array, $fields should be an array of integers
def multiop($fields; f):
if $fields|length == 0 then .
else .[$fields[0]] |= f
| multiop($fields[1:]; f)
end;
multiop(["fieldOne", "fieldTwo"]; . * 3)
或者,如果要将操作应用于所有字段:
multiop( keys_unsorted; .*3)
def triple(f): f |= . * 3;
triple(.fieldOne, .fieldTwo)