在 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中还有一个独特的关键字,但我无法弄清楚这对我有什么帮助。
答案 0 :(得分:1)
使用unique
是安全的,但确实需要排序,这可能不是必需的。例如,在您的特定情况下,重复是jq查询的工件。考虑使用any
代替(或同样),因为它更精确地捕获意图("至少一个"),以及"短路"语义(即一旦条件成立就停止搜索):
$ jq '.nodes[]
| select( any(.attributes[]; .required == true))
| .address' input.json
输出:
"127.0.0.1"
如有必要,您随时可以添加unique
。