我想自动下载AdoptiumJDK的最新LTS.所以我一开始就找到了a good list个.

我想只过滤1.17版的稳定版本,所以我try 了:

curl -s https://raw.githubusercontent.com/coursier/jvm-index/master/index.json 
| jq -r '.linux.amd64."jdk@adoptium-jre" 
| to_entries[] 
| .[] 
| select(match("1.17.[0-9]+.[0-9]+$"))'

提供:

1.17.0.1
1.17.0.2
1.17.0.3
1.17.0.4

但我想要最新的(最高数字)版本,我想要这个版本的URL.

curl -s https://raw.githubusercontent.com/coursier/jvm-index/master/index.json 
| jq -r '.linux.amd64."jdk@adoptium-jre" 
| to_entries[] 
| .[] 
| select(match("1.17.[0-9]+.[0-9]+$"))'   
| sort -n 
| tail -1

但这并不优雅,我必须通过bash解析该输出并进行新的查找.

如何获取1.17的当前最新版本的URL(应该是"tgz+https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jre_x64_linux_hotspot_17.0.4_8.tar.gz")

推荐答案

作为应用正则表达式的一部分,您可以获取键/值对,然后对Version字段执行sort_by,而不是只获取版本字段.记住对.字符进行转义以将其视为文字,或使用startswith("1.17.")

.linux.amd64."jdk@adoptium-jre" 
| to_entries 
| map(select(.key | test("1\\.17\\.[0-9]+\\.[0-9]+$"))) 
| sort_by(.key | split(".") | map(tonumber)) 
| last.value

这里的关键部分是sort_by表达式,它告诉jq将版本字段拆分为组成字符串,然后转换为数字,即map(tonumber),然后对其执行排序操作.

随着这一操作的进行,预计名单[1, 17, 0, 4]将成为其余记录中最高的.last内置函数获取元素列表中的最后一条记录.

JQplay demo

Json相关问答推荐

为什么terraform不缩小这个策略JSON?'

在MongoDB中检索某个月份和年份的JSON文档

规范化JSON数据

Ansible - 将文件内容添加到字典中

Jolt规范:将嵌套数组中的null元素移除

如何使用Powershell查找所有包含特定键值对的JSON对象并迭代所有对象?

Vega-Lite规范:尽管在规范中提供了数据,但显示空图表

APIM 生成 JsonArray 到 EventHub

Jolt 不打印任何东西

try 使用 JQ 转换 JSON 中过于复杂的对象数组

Oracle json 对象的最后一个值不在引号中

如何将该 JSON 解析为 Kotlin 类?

JSON 字段的多个名称

Kotlin Android Room 处理 Moshi TypeConverter 中的空对象列表

如何使用 Swiftui 判断 JSON 是否缺少键值对

以 JSON 格式访问(新型、公共)Google 工作表

一起使用 Argparse 和 Json

[__NSCFNumber 长度]:发送到实例 UITableView 的无法识别的 Select 器

如何将单引号转义成双引号转成单引号

如何使用 Json.NET 反序列化可以是两种不同数据类型的 JSON 属性