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