У меня есть ответ Json для метода POST в bash, и я хотел бы захватить значение послеидентификатор сессии":"и присвоить его переменнойидентификатор сессии.
{"changeId":"79911476-53a4-46e1-8ffd-422436b51ad1","changeType":"создано","record":{"key":"159.65.198.219"}},{"changeId":"bd52dcbd-a5ab-4557-b2b8-88793c2d2964","changeType":"создано","record":{"key":"161.35.111.167"}},{"changeId":"f4f5c94e-6c06-473c-b810-b7bbd69c71ad","changeType":"создано","record":{"key":"161.35.123.111"}}],"sessionId":"b7305d77-20f1-4d57-9eb1-9b9fb4f9552d"}
#API-вызов
request_post="$(curl --insecure --request POST "endpoint_URL")"
эхо $request_post
Мне нужна помощь для выполнения следующего шага
#Вырезать sessionId из ответа
session_ID=
решение1
Хотя разбор структур JSON должен выполняться с помощью парсера JSON, такие тривиальные случаи, как этот, можно выполнить с помощью тривиального инструмента, и вы можете передать ответ по конвейеру sed
, например:
sed 's/.*"sessionId":"\([^"]*\).*/\1/'
\______________/ \___/ \/
A B C
A соответствует всему до и включая "sessionId":"
, B соответствует всему последующему не- "
, что является фактическим sessionId, а C соответствует остальной части строки. B включен в \(\)
, поэтому на него можно ссылаться при замене как \1
. Таким образом, вся строка заменяется только sessionId.
Конечно, если вывод можно разделить на несколько строк или использовать другие вариации, допускаемые форматом JSON, скрипт станет сложнее.