如何使最简单的 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
jsonpath isn't the same as jq
过滤器 '.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
很简单
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.6jsonpath isn't the same as jq
过滤器 '.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