如果用户的领域是内部的,我需要显示他们。
输入:
[
{
"name": "A_A",
"uri": "https:test/test",
"realm": "internal"
},
{
"name": "B_B",
"uri": "https:test/test",
"realm": "internal"
},
{
"name": "C_C",
"uri": "https:test/test",
"realm": "external"
}
]
尝试过:
jq 'if .[].realm == "internal" then .[].name else empty end'
但问题是它列出了所有用户。
预期输出:
A_A , B_B
答案1
您可以使用 jq 函数select
:
<file jq -r '.[] | select(.realm == "internal") | .name'
第一个.[]
获取数组元素。适用select()
于单个元素和过滤器,其中具有正确的realm
。最后一部分打印该name
字段。
答案2
你必须把你的条件后您迭代了要测试的单个项目。
jq '.[]| (if .realm == "internal" then .name else empty end)'
答案3
@csv
看来用户想要 CSV 格式的输出,所以我只是提供一个替代解决方案,展示如何使用jq
.
此命令还用于map()
将select()
语句应用于输入数组的每个元素。
$ jq -r 'map(select(.realm == "internal").name)|@csv' file
"A_A","B_B"
这表明我已经通过根据键的值选择相关的数组条目,然后从中realm
提取键的值来解决这个问题。name
这给我们留下了一个值数组name
,它@csv
格式化并输出为单个 CSV 记录。