Bash & cURL: получить JSON из веб-API и найти его по определенным парам ключ: значение - PullRequest
0 голосов
/ 01 ноября 2018

Я проверяю веб-API для ответа приложения / json, этот ответ представляет собой набор пар ключ-значение, например:

{"id":89,"name":"User saved 2018-07-03 12:01:47.337483","create_time":1530644507337,"auto":false,"recovered":false}
{"id":49,"name":"User saved 2018-05-24 12:33:53.927798","create_time":1527190433927,"auto":false,"recovered":false}
{"id":199,"name":"Daily backup 2018-10-22 02:37:37.332271","create_time":1540201057332,"auto":true,"recovered":false}

и т. Д., И т. Д. *

Я бы хотел перебрать этот ответ и найти целочисленное значение для ключа "id", а затем сохранить его как переменную. Если бы выше был весь мой JSON, я бы хотел получить переменную = 199.

Делать что-то вроде этого:

MY_VARIABLE=$(curl -k -X GET --header "Accept: application/json" \
--header "Authorization: MyAPITarget apikey=${MY_APIKEY}" \
"https://targetserver/api/methodImCalling" |

Вывод этого - JSON выше. Могу ли я передать этот вывод в массив и перебрать его, но только поискать значение «id», а затем сделать что-то похожее на:

for (i = 0; i < id.length; i++)

Я работал с кодом только некоторое время, и в настоящее время я больше всего работаю с JS, пытаясь установить соединение здесь для bash. Я стараюсь избегать использования каких-либо «установленных» инструментов, поэтому я использую bash, я бы хотел, чтобы этот скрипт запускался «из коробки» на любой платформе linux / unix. Какие-нибудь советы? Спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

Вероятно, это отдельная установка, но вам нужен инструмент jq:

max_id=$(curl ... | jq -s 'map(.id) | max')

Стандартные инструменты, которые можно ожидать, что будут предварительно установлены, просто не подходят для работы с JSON.

Хотя это и не стандартно, на любом компьютере, на котором установлен curl, вероятно, установлен Python, и вы можете использовать его стандартный модуль json для правильной обработки JSON. Вот несколько неуклюжий однострочник:

curl ... | 
  python -c 'import json,sys; x="[%s]"%(",".join(sys.stdin),); print(max(y["id"] for y in json.loads(x)))'

Другие нестандартные, но распространенные языки (Perl, Ruby и т. Д.), Вероятно, также имеют встроенные способы использования JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...