如何对jq中的字段值进行多重赋值?

问题描述 投票:0回答:2

我有这样的 jq 命令:

jq --arg ts "$TS" '.Date = $ts, .Marker.Date = $ts, .InfoFromTerminator.Timestamp = $ts'

但它似乎只替换了最后一项,保持前两项不变。如何重写查询以替换所有 3 个参数?

json jq
2个回答
37
投票

逗号是

jq
中的运算符:

甚至逗号运算符也是一个生成器,首先生成值 由逗号左侧的表达式生成,然后对于每个 这些值由右侧的表达式生成 逗号。

可以通过从一个过滤器/分配到下一个过滤器/分配的管道来更改多个元素,如下所示:

jq --arg ts "$TS" '.Date = $ts | .Marker.Date = $ts | .InfoFromTerminator.Timestamp = $ts'

0
投票

您还可以使用逗号将属性集合分配给相同的值:

jq --arg ts "$TS" '(.StartDate, .EndDate) = $ts'

这将获取左侧的路径引用列表并将它们全部更新为新值。当右侧表达式不仅仅是一个简单变量时,这会很有用。

示例:

$ jq '(.a, .b) = "new value"' <<< '{"a": "a", "b": "b", "c": "c"}'
{
  "a": "new value",
  "b": "new value",
  "c": "c"
}
© www.soinside.com 2019 - 2024. All rights reserved.