如果任何数组元素满足条件,则jq选择属性

时间:2016-10-07 10:02:06

标签: json select jq any

jq 的帮助下,我想在其属性列表中选择至少有一个 required = true 的节点的所有地址。结果列表应该有唯一的项目。

这是我的Json:

jq '.nodes[] | select(.attributes[].required == true) | .address'

我首先尝试过:

"127.0.0.1"
"127.0.0.1"

这会产生:

            line = line.replaceAll("[\\n]+", "\n");


            // 1. compress all non-newline whitespaces to single space

            line = line.replaceAll("[\\s&&[^\\n]]+", " ");


            // 2. remove spaces from begining or end of lines
            line = line.replaceAll("(?m)^\\s|\\s$", "");

因此,它获取了在属性部分中找到的每个 required = true 字段的地址。如何使结果列表唯一? jq中还有一个独特的关键字,但我无法弄清楚这对我有什么帮助。

1 个答案:

答案 0 :(得分:1)

使用unique是安全的,但确实需要排序,这可能不是必需的。例如,在您的特定情况下,重复是jq查询的工件。考虑使用any代替(或同样),因为它更精确地捕获意图("至少一个"),以及"短路"语义(即一旦条件成立就停止搜索):

$ jq '.nodes[]
| select( any(.attributes[]; .required == true))
| .address' input.json

输出:

"127.0.0.1"

如有必要,您随时可以添加unique