![使用 jq 时正确转义通配符](https://linux22.com/image/199138/%E4%BD%BF%E7%94%A8%20jq%20%E6%97%B6%E6%AD%A3%E7%A1%AE%E8%BD%AC%E4%B9%89%E9%80%9A%E9%85%8D%E7%AC%A6.png)
下面的命令有效:
$ 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 标准。