我在试着拿到最新版本的"Spip" 为此,我可以使用https://www.spip.net/spip_loader.api的JSON输出,但我不知道如何使用JQ获得bash中的第二个记录键(4.2.5).

$ wget -q -O- https://www.spip.net/spip_loader.api | jq '.versions'
{
  "dev": "spip/dev/spip-master.zip",
  "4.2.5": "spip/archives/spip-v4.2.5.zip",
  "4.1.12": "spip/archives/spip-v4.1.12.zip",
  "4.0.11": "spip/archives/spip-v4.0.11.zip",
  "3.2.19": "spip/archives/spip-v3.2.19.zip"
}

我只能用| sed -n '3p'打到第三排,但我觉得它不是很干净,我认为完全使用JQ会更合适.

我承认这更多的是出于好奇,而不是出于需要,因为我可以做其他的事情.

推荐答案

您可以使用keys_unsorted以表示顺序获取键的列表,然后获取第二个键(在索引1处):

jq -r '.versions | keys_unsorted[1]'

Demo

获取"最新版本"在很大程度上取决于版本号是如何构造的.你的样本表明,只考虑数字就足够了.所以,从键上go 掉连续的数字,把它们变成数字,然后通过它得到最大值:

jq -r '.versions | keys_unsorted | max_by([scan("\\d+") | tonumber])'

Demo

输出:

4.2.5

Json相关问答推荐

如何在JMESPath中区分空和假?

Bash和echo命令出现意外结果

PowerShell:使用JSON原生的Short命令处理JSON?

如果主对象中已存在属性,则不应在Jolt中引用次对象

简单条形图和有序分类中条形图的 colored颜色 梯度

当 JSON 字段名称有空格时,ABAP 中的 JSON 反序列化

将 std::可选值存储到 json 文件 C++

使用 jolt 变换压平具有公共列 JSON 的复杂嵌套

使用jq根据对象中键的值查找对象

如何使用nifi从json文件中过滤属性

JSONPath:查找子项目条件在字符串列表中的项目

如何在linux中用jq过滤json数组?

在循环中将变量添加到 bash 数组

使用非美国日期格式时,JsonConvert.DeserializeObject 无法将字符串转换为 DateTime

在 JSON 编码的 HTML5 数据属性中转义/编码单引号

如何使用 LWP 发出 JSON POST 请求?

错误未判断调用put(K, V)作为原始类型java.util.HashMap的成员

Json.NET 是否缓存类型的序列化信息?

PostgreSQL 中的 JSON 模式验证?

雅虎财经全币种报价 API 文档