Bash получить вторую запись JSON с помощью jq

Я пытаюсь получить последнюю версию "spip" Для этого я могу использовать вывод JSON из https://www.spip.net/spip_loader.api, но я не знаю, как получить второй ключ записи (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"
}

Я мог бы просто получить третью строку с помощью | sed -n '3p', но мне это не кажется очень чистым, и я думаю, что полное использование jq было бы более подходящим.

Признаюсь, это скорее из любопытства, чем из необходимости, поскольку я могу поступить иначе.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать keys_unsorted, чтобы получить список ключей в порядке представления, а затем взять второй (с индексом 1):

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

Демо

Получение «самой последней версии» во многом зависит от того, как построены номера версий. Ваш образец показывает, что достаточно учитывать только цифры. Итак, снимаем с клавиш последовательные цифры, превращаем их в числа и получаем тем самым максимум:

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

Демо

Выход:

4.2.5

Для max_by не нужно "несортированное" (но это не помешает).

choroba 24.09.2023 22:16

@choroba Просто использовать keys, конечно, короче, но мне кажется, что дополнительная сортировка делает ее менее эффективной. Никогда не тратил время на то, чтобы посмотреть, как это на самом деле реализовано.

pmf 24.09.2023 22:20

Прекрасно и понятно.

Chris972 25.09.2023 01:01

Это создаст как версию, так и путь:

wget -q -O- https://www.spip.net/spip_loader.api |
  jq -r '.versions | to_entries
        | max_by(.key | [scan("\\d+") | tonumber])
        | "\(.key) \(.value)"'
# Output: 4.2.5 spip/archives/spip-v4.2.5.zip

Другие вопросы по теме