使用 jq 时正确转义通配符

使用 jq 时正确转义通配符

下面的命令有效:

$ echo '{ "a": [ { "b": "1" }, { "b": "2" } ] }' | jq -r '.a[0].b'
1

b但是,如果我尝试获取下面所有元素的值,a则会出现以下错误:

$ echo '{ "a": [ { "b": "1" }, { "b": "2" } ] }' | jq -r '.a[*].b'
jq: error: syntax error, unexpected '*' (Unix shell quoting issues?) at <top-level>, line 1:
.a[*].b   
jq: 1 compile error

我应该如何逃脱通配符?我尝试了几种变体但没有成功。

根据以下规定,使用通配符作为数组索引是一个有效的选项https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html#:~:text=JSONPath%20is%20a%20query%20语言,%20需要%20到%20be%20验证

答案1

中的数组迭代器jq.[].星号字符不是必需的。以下命令应该会得到预期的输出:

echo '{ "a": [ { "b": "1" }, { "b": "2" } ] }' | jq -r '.a[].b'

结果:

1
2

进一步参考:jq手册

至于为什么语法不同,jq是有一个工具有自己的语法进行查询。它不基于 JSONPath 标准。

相关内容