Я пытаюсь отфильтровать запрос curl с помощью jq, чтобы получить определенные поля и поместить их в переменные. Изначально я использовал базовый запрос curl, такой как этот:
myResponse=$(curl -u myUsername:myPassword -XGET "https://myWebsite.com/_count?pretty&q=TEST")
Я предоставляю свое имя пользователя и пароль и получаю подсчет того, сколько раз присутствует термин 'TEST', который возвращается в виде симпатичного json. Этот ответ помещается в переменную с именем myResponse.
Я использовал jq для фильтрации этого значения, чтобы получить определенное значение количества из json:
count=`echo $myResponse | jq -r '.count'`
Это сработало и дало мне номер.
Итак, теперь я хотел немного поэкспериментировать. Помимо получения ответа от запроса curl, я также хотел получить код ответа (200, 404 и т. д.). Поэтому я адаптировал свой запрос curl следующим образом:
myResponse=$(curl --write-out %{http_code} --silent -u myUsername:myPassword -XGET "https://myWebsite.com/_count?pretty&q=DEBUG")
Это успешно вернуло как ответ JSON, так и код ответа http в виде числа.
Однако, как только это передается в jq, я получаю следующую ошибку:
jq: error: Cannot index number with string
Как устранить эту ошибку? Когда это был просто json, jq справлялся с этим нормально, но как только этот responsecode был добавлен в конец, он не может его разобрать.
Спасибо
решение1
В переменной, которую я передавал в jq, были и JSON, и HTTP. Сначала нужно разделить переменную на JSON и HTTP с помощью tail
и head
. Как только я передал чистый JSON в jq, все заработало.