bash 使用 jq 获取第二条 JSON 记录

Chr*_*972 1 bash json jq

我正在尝试获取最新版本的“spip”为此,我可以使用https://www.spip.net/spip_loader.api的 JSON 输出,但我不知道如何获取第二个记录密钥( 4.2.5) 在 bash 中使用 jq。

$ 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"
}
Run Code Online (Sandbox Code Playgroud)

我可以得到第三行,| sed -n '3p'但我发现它不是很干净,我认为完全使用 jq 会更合适。

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

pmf*_*pmf 5

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

jq -r '.versions | keys_unsorted[1]'
Run Code Online (Sandbox Code Playgroud)

演示

获取“最新版本”很大程度上取决于版本号的构造方式。您的样本表明仅考虑数字就足够了。因此,从键中去除连续的数字,将它们转换为数字,并由此获得最大值:

jq -r '.versions | keys_unsorted | max_by([scan("\\d+") | tonumber])'
Run Code Online (Sandbox Code Playgroud)

演示

输出:

4.2.5
Run Code Online (Sandbox Code Playgroud)