【发布时间】:2017-09-19 19:12:12
【问题描述】:
jq 是否有异或 (AKA xor) 运算符?我在它的文档中找不到它。
(我在后来发现在 jq 中工作并记录在案的文档中找不到其他主题。我一开始可能没有找到它们,因为我使用了糟糕的搜索词。)
我希望 jq 从输入中返回所有顶级对象,这些对象的数组属性包含两个特定值之一,但不是两个值。
例如,给定输入:
[
{"letters": ["a", "c"]},
{"letters": ["a", "b", "c"]},
{"letters": ["b", "c"]}
]
我只想要"letters" 属性包含"a" 或"b" 但不能同时包含两者的对象。
我最终使用了冗长的过滤器:
map(select(.letters//[]|((contains(["a"]) or contains(["b"])) and (contains(["a", "b"])|not))))
哪个给出了正确的输出:
[{"letters":["a","c"]},{"letters":["b","c"]}]
但这是漫长、乏味且令人头疼的维护工作。有没有更简单的方法来做到这一点?
此代码的“jq play”sn-p:https://jqplay.org/s/mwBhsYud2F
PS:即使没有比我找到的更好的解决方案,我也很乐意收到有关改进它的建设性批评。
【问题讨论】: