json - 使用JQ对多个JSON字段执行相同的操作

标签 json functional-programming jq

我正在尝试使用 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/

相关文章:

json - 玩 anorm,从 json 创建模型,而不在 json 中传递 anorm PK 值

json - 如何使用 PostgreSQL 更新 jsonb 字符串?

javascript - 在函数式编程的 javascript 中,返回回调而不是仅仅调用回调有什么惩罚吗?

java - validateOrThrow 实现

sed - 从json参数获取值不起作用(jq : 1 compile error)

arrays - JSON:使用 jq 编辑嵌套数组中的特定值

json - Sql Server 2016中json数据的Where子句

json - Domino 数据服务 - 更改富文本字段中附加文件的名称

function - PL/SQL 将函数作为参数传递

json - 用jq解析JSON格式