据我了解,在更新分配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/

10-16 06:58