jq 从数组中选择具有字段最小值或最大值的记录

问题描述 投票:0回答:1

我有一个包含这样记录的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"

我感觉我已经很接近了,但是却被困住了。我做错了什么?

提前致谢!

json max jq min
1个回答
7
投票
([ .[].number ] | min) as $m| map(select(.number== $m))

参见https://jqplay.org/s/bUwtNrfAE-

首先

要检索第一个最小项目:

([ .[].number ] | min) as $m| first(.[]|select(.number== $m))

min_by、minimal_by 等

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。该部分还有面向流的定义。

© www.soinside.com 2019 - 2024. All rights reserved.