【发布时间】:2021-01-31 18:46:55
【问题描述】:
我正在尝试通过对象的name 属性过滤对象数组,然后选择通过过滤器的第一个元素。
我已阅读 How to filter array of objects by element property values using jq? 并且在过去 2 小时内一直在尝试 jq 和 https://jqplay.org/,但我不明白。
整个事情是在 github 操作中执行的 bash 脚本。
ALL_ZEIT_DEPLOYMENTS 在哪里:
{
"deployments":[
{
"uid":"dpl_95kYvsWHaq3yAuJJ6uAaWXQY287R",
"name":"nrn-v2-mst-aptd-gcms-lcz-sty-c1",
"url":"nrn-v2-mst-aptd-gcms-lcz-sty-c1-n9ru06e1q.vercel.app"
},
{
"uid":"dpl_Fwk5UXLJFU1miLnSfoUM91gnqSNK",
"name":"nrn-v2-mst-aptd-gcms-lcz-sty-c2",
"url":"nrn-v2-mst-aptd-gcms-lcz-sty-c2-hpbca7bei.vercel.app"
},
{
"uid":"dpl_5U9vDaGKWBkSJF1H1EYMzreWeYvu",
"name":"nrn-v2-mst-aptd-gcms-lcz-sty-c1",
"url":"nrn-v2-mst-aptd-gcms-lcz-sty-c1-16g58d4zd.vercel.app"
}
]
}
而 bash 脚本是:
# Filter deployments by their "name" property in order to consider only deployments related to the current project
ZEIT_LATEST_DEPLOYMENT_FOR_CURRENT_PROJECT=`echo $ALL_ZEIT_DEPLOYMENTS | jq '.deployments[] | select(.name == "$VERCEL_PROJECT_NAME") | .url'`
echo "Latest Vercel deployment for current project: " $ZEIT_LATEST_DEPLOYMENT_FOR_CURRENT_PROJECT
# Extract the first element (which is the latest vercel deployment), and strip the double quotes from its value
ZEIT_LATEST_DEPLOYMENT_DOMAIN_FOR_CURRENT_PROJECT=`echo $ZEIT_LATEST_DEPLOYMENT_FOR_CURRENT_PROJECT | jq --raw-output '[].url'`
echo "Latest Vercel deployment domain url for current project: " $ZEIT_LATEST_DEPLOYMENT_DOMAIN_FOR_CURRENT_PROJECT
在https://jqplay.org/ 执行以下jq 过滤器.deployments[] | select(.name == "nrn-v2-mst-aptd-gcms-lcz-sty-c1") | .url,我得到了一个“列表”的网址。
但是,我不明白如何提取它的第一个元素,它不是数组,即使我尝试将其转换为带有 .deployments[] | select(.name == "nrn-v2-mst-aptd-gcms-lcz-sty-c1") | [.url] | .[0] 的数组,我仍然得到相同的结果。
我错过了什么?
我的目标是让它在 Github Actions 中运行。
我正在使用网络编辑器预先进行测试。另外,我想将处理的不同部分拆分为不同的变量,以便将它们打印在 Github Actions 日志中,因为它有助于更快地调试。 (例如:过滤数组,然后选择第一个元素)
解决方案:
first(.deployments[] | select(.name == "nrn-v2-mst-aptd-gcms-lcz-sty-c1") | .url)
【问题讨论】:
标签: json select stream jq github-actions