JQ:选择多个条件

And*_*lta 80 json jq

我有一个json,目前使用select来获取只匹配一个条件的数据,我需要根据更多条件进行过滤.

例如:

.[] | select((.processedBarsVolume <= 5) && .processedBars > 0)
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

Han*_* Z. 182

jq 支持普通的布尔运算符和/或/不,所以它看起来像:

.[] | select((.processedBarsVolume <= 5) and .processedBars > 0)
Run Code Online (Sandbox Code Playgroud)

  • 太好了,如果你能接受答案那就太好了! (45认同)
  • 注意:和/或/不区分大小写。和/或不起作用。 (7认同)
  • `.processedBarsVolume &lt;= 5` 周围的额外大括号有什么原因吗? (3认同)
  • 不,只是将OP的建议与相关的最小值保持一致 (3认同)
  • 仍然希望@Andrei Colta将在将近3年后接受答案... (3认同)
  • 在这一点上似乎不太可能得到心爱的复选标记 (3认同)
  • “最后一次看到16年7月17日在16:14”。前景不太好。 (3认同)
  • jq 中丰富的括号是明智的。如果您习惯使用命令式语言,并且在其他出色的手册中记录得很少,那么运算符优先级有点不直观。 (3认同)
  • 以下是“and/or/not”的文档:https://stedolan.github.io/jq/manual/#and/or/not (2认同)

siy*_*iyb 5

我必须用startswith括号将管道包裹起来才能完成这项工作。

jq -n 'env | with_entries(select ((.key|startswith("CI_")) or .key == "DOCKER_CONTAINER_VERSION_TAG"))'
Run Code Online (Sandbox Code Playgroud)