我正在尝试使用 JQ 更改 JSON 对象中多个字段的值。但是,我想对每个字段执行相同的操作。我做到了这一点,但我所做的方式似乎多余。
jq '.fieldOne |= 。 * 3 | .fieldTwo |= . * 3 | ...'
有没有一种方法可以做这样的事情:(不完全是这样,因为 JQ 不会那样工作)
jq '(.fieldOne | .fieldTwo | ...) |= 。 * 3'
最佳答案
感谢 jq 的魔力,你可以这样写:
(.fieldOne, .fieldTwo) |= .*3
更一般地说,这里还有另外两种方法。
多操作/2
# 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)
三倍/1
def triple(f): f |= . * 3;
triple(.fieldOne, .fieldTwo)
关于json - 使用JQ对多个JSON字段执行相同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787648/