【问题标题】:jq select record from array with min or max value of fieldjq从数组中选择字段的最小值或最大值的记录
【发布时间】:2021-10-02 06:54:28
【问题描述】:

我有一个包含这样记录的 json:

[
 {"number":1},
 {"number":3}
]

并希望选择(过滤)具有“数字”字段的最大值或最小值的记录。

我可以像这样得到“数字”的最小值或最大值:

$ 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】:
([ .[].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_bymin_by,如记录在 https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions

有关maximal_by 的定义,请参阅https://github.com/stedolan/jq/wiki/Cookbook#find-the-maximal-elements-of-an-array-or-stream 的jq 食谱。该部分也有面向流的定义。

【讨论】:

  • 谢谢!原来 max_by 和 min_by 为我做了这件事:echo '[{"number":1},{"number":3}]' | jq 'min_by(.number)',但再次感谢您展示了变量的技巧!
猜你喜欢
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
相关资源
最近更新 更多