You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq为动态键对应的数组追加值?

解决动态键下的jq数组追加问题

你遇到的问题是jq在访问动态键属性时的语法差异——构造对象时的动态键写法{($key): ...}和访问已有属性时的规则不一样,导致了编译错误。

正确的命令写法

要实现动态键对已有数组的追加,你需要用方括号语法访问动态键,而不是.($key)。正确的命令如下:

echo '{"foo": ["baz"]}' | jq --arg key "foo" --arg value "bar" '.[$key] += [$value]'

执行后会得到你预期的输出:

{"foo": ["baz", "bar"]}

为什么之前的写法错误?

jq的语法规则里:

  • 当构造新对象时,动态键需要用{($key): ...}这种带括号的写法,比如你提到的jq --null-input --arg key foo '{($key): "bar"}',这是专门用于创建带动态键的对象的语法。
  • 当访问已有对象的属性时,动态键必须使用.[$key]的方括号语法,.($key)这种写法不符合jq的解析规则,所以会报编译错误。

另一种等价写法

你也可以用|=操作符结合数组拼接来实现,效果完全相同:

echo '{"foo": ["baz"]}' | jq --arg key "foo" --arg value "bar" '.[$key] |= . + [$value]'

这里|=表示把左边属性的值传递给右边的表达式,. + [$value]就是在原有数组基础上追加新元素。

内容的提问来源于stack exchange,提问作者fata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:36:13