JQ按子数组筛选-在属性名称中使用连字符



我有以下数据文件:

[
{
"createTime": "2021-12-15T09:39:59.812377Z",
"etag": ""15d377a6a77bab"",
"labels": {
"is-secret": "false"
},
"name": "projects/xxx/secrets/xxx",
"replication": {
"automatic": {}
}
},
{
"createTime": "2021-12-19T03:47:53.594568Z",
"etag": ""15d377a868c624"",
"labels": {
"is-secret": "true"
},
"name": "projects/xxx/secrets/xxx",
"replication": {
"automatic": {}
}
}
]

我正在尝试使用以下查询选择标签为issecret=true的所有元素:

cat data.txt | jq '.[] | map(select( any(.labels[]; .is-secret == "true" )))'

输出必须是一个数组。

收益率:jq:1编译错误

有人能帮忙吗?干杯

您可以将map(select(...))直接应用于数组,并返回过滤后的数组:

jq 'map(select(.labels["is-secret"] == "true"))'

由于连字符,您还必须引用is-secret;方括号表示法是可选的,但它是手册所使用的;因此

jq 'map(select(.labels."is-secret" == "true"))'

也会起作用。

最新更新