据我了解,在更新分配empty
中使用|=
会删除该条目,类似于del(path)
,并且del(path)
也可以在数组中使用。
我试图有选择地删除和修改数组条目,但结果很奇怪。在尝试理解问题时,我将代码最小化为:
过滤器:.[]|=empty
输入:[0,1,2,3,4,5]
输出:[ 1, 3, 5]
在线尝试here
显然,甚至只删除数组索引。为什么?
最佳答案
如评论中所述,jq对.[] |= empty
的处理随时间而变化。可能有人希望,对于每个数组A,A | (.[] |= empty)
都会产生[]
,这是基于以下理论:表达式应导致A中的每个项目都被empty
取代。
无论如何,当前的(jq 1.6)实现显然是错误的,在此示例中特别值得注意:
jq-1.6 -n '[0,1,2,3] | (.[] |= if . == 2 then empty else . end)'
[
0,
1,
3,
null
]
错误报告可以提交给https://github.com/stedolan/jq/issues
关于jq - `。[] | = empty'的令人困惑的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53381867/