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

jq中Update-assignment赋值empty仅删除首个路径的疑问

jq 1.6中.[] |= empty仅删除首个元素的问题分析

这是jq 1.6版本的特定行为,并非你对语法的理解错误,该问题在后续的jq 1.7版本中已经被修复。

原因说明

在jq 1.6的实现逻辑里,当使用|=将empty赋值给数组的每个元素(.[] |= empty)时,empty会终止当前的迭代上下文——处理完第一个元素后,迭代就直接停止了,导致后续元素没有被处理。

而另外两种操作的逻辑不同:

  • del(.[])是专门的批量删除操作,会遍历数组的所有元素并执行删除,不受empty的上下文终止影响;
  • 赋值普通值(比如.[] |= 0)时,不会触发迭代终止的逻辑,因此能正常遍历所有元素完成赋值。

验证示例(jq 1.7中已修复)

如果升级到jq 1.7,执行同样的命令会得到预期结果:

$ jq --version
jq-1.7
$ echo '[1, 2]' | jq -c '.[] |= empty'
[]

临时解决方案(针对jq 1.6)

如果无法升级版本,可改用del(.[])来实现批量删除数组元素的需求,或者用等价的遍历写法:

echo '[1, 2]' | jq -c 'map(empty)'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:24:56