`null` 和 `no output` 的区别

Difference between `null` and `no output`

我遇到了 nullnothing 之间的一些差异,有人可以解释一下吗?在大多数语言中,null 是 considered/used 代表什么。

select记录到return无输出。并添加(即 +null 到 X 产生 X。现在考虑这些示范性示例(无需输入):

  1. 添加

这里我们有空对象,我们什么都不更新:

{} | . |= . + ({} | select (.foo == 123))

这导致

null
  1. 添加 null

相同的模板,但使用替代运算符将 nothing 替换为 null:

{} | . |= . + ({} | select (.foo == 123)//null)

这导致

{}

谁能解释一下 nothingnull 的区别?

null 只是一个常规的 JSON 值;从概念上讲,它与没有值完全不同,即您所说的 nothing。看看这些例如(empty 是一个 returns 什么都没有的过滤器):

$ jq -n '[null] | length'
1
$ jq -n '[empty] | length'
0

{} + null returns {} 返回,{} | . |= emptydel(.) 完全相同,只是设计选择。