当结果取决于所选元素的数量

时间:2017-05-31 22:08:46

标签: json parsing jq

根据上下文,我的jq查询选择一个或多个元素。如果我的查询返回一个我希望显示特定字段值的元素,否则,我希望显示另一个字段值。

例如,我有这个简单的查询:

jq'.foo |选择(.faa | test(“word”))| [.fii,.fuu]

有时,选择(select(.faa ...))会返回一个元素,有时会返回几个元素。如果我有一个元素,我想只显示字段.fii,否则,我只想显示字段.fuu。 有没有办法用jq做到这一点? (只有一个查询)

谢谢:)

1 个答案:

答案 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")) ]