Bash

使用 jq 時正確轉義萬用字元

  • December 1, 2021

以下命令有效:

$ 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%20language,使用萬用字元作為數組索引是一個有效的選項, that%20need%20to%20be%20verified

中的數組迭代器jq.[]. 星號字元不是必需的。以下命令應該為您提供預期的輸出:

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

結果:

1
2

進一步參考:jq手冊

至於為什麼語法不同,jq是有自己的語法來查詢的工具。它不基於 JSONPath 標準。

引用自:https://unix.stackexchange.com/questions/679735