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言語,%20requires%20 to%20be%20 確認

答え1

配列イテレータにアスタリスク文字は必要jqあり.[]ません。次のコマンドは、予想される出力を提供します。

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

結果:

1
2

追加リファレンス:jqマニュアル

構文が異なる理由には、jqクエリ用の独自の構文を持つツールがあります。 JSONPath標準に基づいていません。

関連情報