根据上下文,我的jq查询选择一个或多个元素。如果我的查询返回一个我希望显示特定字段值的元素,否则,我希望显示另一个字段值。
例如,我有这个简单的查询:
jq'.foo |选择(.faa | test(“word”))| [.fii,.fuu]
有时,选择(select(.faa ...))会返回一个元素,有时会返回几个元素。如果我有一个元素,我想只显示字段.fii,否则,我只想显示字段.fuu。 有没有办法用jq做到这一点? (只有一个查询)
谢谢:)
答案 0 :(得分:1)
.foo | select(.faa | test("word"))
可以产生的唯一方式
如果输入包含一个流,则多个JSON值
对象。因此,以下将假设情况就是这样。
解决给定问题的一种方法是使用-s命令行选项。
然后,您可以简单地计算解决方案的数量 以下几行:
map(.foo | select(.faa | test("word")))
| if (length == 1) then map(.fii)
else map(.fuu)
end
如果你想要一个值流而不是一个数组,那么你
可以简单地将| .[]
附加到上面的过滤器。
inputs
jq 1.5引入了inputs
,这避免了“啜饮”大文件的一些潜在问题。使用带有-n选项的jq,给定问题的解决方案如上所述,但第一行替换为:
[inputs | .foo | select(.faa | test("word")) ]