if jq 中的 else 未给出预期输出

if jq 中的 else 未给出预期输出

如果用户的领域是内部的,我需要显示他们。

输入:

[
  {
    "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 记录。

相关内容