如何使最简单的 jq 过滤器查询工作?

How to make the simplest jq filter query work?

很简单

echo '{"nodes":[{"id":"1"}]}' | jq '.nodes[?(@.id=="1")]'

由于

而失败
jq: error: syntax error, unexpected '?' (Unix shell quoting issues?) at <top-level>, line 1:
.nodes[?(@.id=="1")]       
jq: 1 compile error

提示“Unix shell 引用问题?”不适用,因为所有内容都被 ' 引用。但是,我尝试了各种不必要的单引号和双引号组合及其转义版本以及 [[@?.

的转义

echo '{"nodes":[{"id":"1"}]}' | jq '.nodes'echo '{"nodes":[{"id":"1"}]}' | jq '.nodes[0]' 一样工作,所以错误一定是在非常简单的过滤器表达式中,在许多示例中都是这样,我在集成测试中使用它Jayway JsonPath library.

我在 Ubuntu 21.04.

上使用 jq 1.6
isn't the same as

过滤器 '.nodes[?(@.id=="1")]'JsonPath syntax


How to make the simplest jq filter query work?

将其更改为 JQ select,如下所示:

jq '.nodes[] | select(.id == "1")'

在哪里

  • .nodes[]遍历所有节点
  • select(.id == "1")只保留对象id === 1

JqPlay Demo