インストールを試みる前に、プロジェクトのアプリケーション名を取得することを目的として、シェルスクリプトでホームブレンドAPIを呼び出しています。幸いなことに、APIはこれをという要素によって提供されますartifacts
。残念ながら、artifacts
1つの要素のみを選択できるキーはもうありません。順序に関係なく、オブジェクトと配列を混在させることができます。
Google Chromeのサンプルデータスニペット:
{
"name":[
"Google Chrome"
],
"artifacts":[
[
"Google Chrome.app"
]
]
}
しかし、ドッカーは別の話です。
{
"name":[
"Docker"
],
"artifacts":[
{
"trash":[
"$(brew --prefix)/bin/docker-compose.backup",
"$(brew --prefix)/bin/docker.backup"
]
},
[
"docker.app"
]
]
}
artifacts
したがって、このようなシェルスクリプトから要素0を取得することはできません。
artifacts=$(curl -s "https://formulae.brew.sh/api/cask/google-chrome.json" | jq -r '.artifacts[0][0]')
artifacts
jqを使用して* .appで終わるパターン値の要素を取得する方法はありますか?私が思いつく最良の疑似コードはこれですが、$ elementを参照しようとすると少し混乱します。
# $cask is determined by a list the script loops through ('google-chrome' is one example)
for element in $(curl -s "https://formulae.brew.sh/api/cask/$cask.json" | jq -r '.artifacts'); do
# if $element is an array and it's value ends with "*.app"
# assign to a variable for later use
done
ここに一つあります。jqplay彫刻返されたより複雑なJSONの1つです。固有値「docker.app」を含む配列の一部が表示されます。これが私が達成したいものです。
ベストアンサー1
このjq
クエリはDockerのJSONで動作します。
.artifacts[] | arrays[0] | select(endswith(".app"))
フィルタはarrays
要素から配列を選択してartifacts
から、この配列の最初の要素を検索して、で終わる要素を見つけることができます.app
。