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

How to make the simplest jq filter query work?

提问人:Kalle Richter 提问时间:7/9/2021 更新时间:7/9/2021 访问量:118

问:

一个非常简单的

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'工作原理相同,因此错误必须存在于过滤器表达式中,这非常简单,在数十个示例中可以看到,并且我在 Jayway JsonPath 库的集成测试中使用了它。echo '{"nodes":[{"id":"1"}]}' | jq '.nodes[0]'

我在 Ubuntu 1.6 上使用 jq 21.04。

json jq 引用 jsonpath

评论

1赞 peak 7/9/2021
由于您已经安装了 jq,您可能需要查看“jq for JSONPath Users”(github.com/stedolan/jq/wiki/For-JSONPath-users)

答:

2赞 0stone0 7/9/2021 #1
不同

筛选器采用 JsonPath 语法'.nodes[?(@.id=="1")]'


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

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

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

哪里

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

JqPlay 演示