如何使用 jq 命令行 JSON 处理器输出反向匹配?

How to output inverted matches using the jq command-line JSON processor?

是否可以使用jq command-line JSON processor输出反向匹配?为此,工具 grep 支持选项 -v, --invert-match: select non-matching lines

例如,我正在搜索如下命令。但是,without(...) 不存在:

$  echo '{"a": 0, "b": 1, "c": 2}' | jq '. | without(c)' 
{
  "a": 0,
  "b": 1
}

是否支持反向匹配?

在写这个问题时,我发现 builtin del(path_expression) function 解决了这个问题:

The builtin function del removes a key and its corresponding value from an object.

$ echo '{"a": 0, "b": 1, "c": 2}' | jq 'del(.c)'
{
  "a": 0,
  "b": 1
}

jq 通常是极简主义的,所以当在寻找相反的东西时有疑问时,not 总是可以提供帮助,例如

with_entries(select(.key == "c"|not))

这里可能不熟悉的是 jq 中的 not 是一个普通的 0 元过滤器。

当然也支持!=:

with_entries(select(.key != "c"))

由于您提到了 grep,可能值得注意的是 grep -v "REGEX" 的 jq“等价物”将是 test("REGEX")|not

顺便说一下,您第一次尝试时的初始 . | 是没有必要的。