我有一个包含这样记录的json:
[
{"number":1},
{"number":3}
]
并且想要选择(过滤)具有字段“number”的最大值或最小值的记录。
我可以得到“数字”的最小值或最大值,如下所示:
$ echo '[{"number":1},{"number":3}]' | jq ' [ .[].number ] | min'
(发出 1)
我可以输出布尔值:
$ echo '[{"number":1},{"number":3}]' | jq '.[].number==([ .[].number ] | min)'
true
false
但是当我尝试将其与 select 放在一起时,它失败了:
$ echo '[{"number":1},{"number":3}]' | jq 'map(select(.[].number==([ .[].number ] | min)))'
jq: error (at <stdin>:1): Cannot index number with string "number"
我感觉我已经很接近了,但是却被困住了。我做错了什么?
提前致谢!
([ .[].number ] | min) as $m| map(select(.number== $m))
参见https://jqplay.org/s/bUwtNrfAE-
要检索第一个最小项目:
([ .[].number ] | min) as $m| first(.[]|select(.number== $m))
jq 具有内置
max_by
和 min_by
,如文档中所述
https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions
有关
maximal_by
的定义,请参阅 jq 食谱:https://github.com/stedolan/jq/wiki/Cookbook#find-the-maximal-elements-of-an-array-or-stream。该部分还有面向流的定义。