JSONレスポンスから文字列をキャプチャする

JSONレスポンスから文字列をキャプチャする

私はbashのPOSTメソッドに対して以下のJSONレスポンスを持っており、その後値をキャプチャしたい。セッションID":"それを変数に割り当てるセッションID

{"changeId":"79911476-53a4-46e1-8ffd-422436b51ad1","changeType":"作成済み","レコード":{"key":"159.65.198.219"}},{"changeId":"bd52dcbd-a5ab-4557-b2b8-88793c2d2964","changeType":"作成済み","レコード":{"key":"161.35.111.167"}},{"changeId":"f4f5c94e-6c06-473c-b810-b7bbd69c71ad","changeType":"作成済み","レコード":{"key":"161.35.123.111"}}],"セッションID":"b7305d77-20f1-4d57-9eb1-9b9fb4f9552d"}

#API呼び出し

request_post="$(curl --insecure --request POST "endpoint_URL")"

$request_postをエコーする

以下の手順を完了するにはサポートが必要です

#レスポンスからセッションIDを切り取る

セッションID=

 

答え1

json 構造の解析は json パーサーによって実行される必要がありますが、このような簡単なケースは簡単なツールで実行でき、答えをパイプすることもできますsed。次に例を示します。

sed 's/.*"sessionId":"\([^"]*\).*/\1/'
      \______________/  \___/  \/
             A            B    C

A は までのすべてに一致し、 も含みます"sessionId":"。B は 以外の後続のすべて"(実際の sessionId)に一致し、 C は行の残りの部分に一致します。B は に含まれているため\(\)、置換では として参照できます\1。したがって、行全体が sessionId のみに置き換えられます。

もちろん、出力が複数の行に分割される場合や、json 形式で許可されている他のバリエーションを使用する場合は、スクリプトはより複雑になります。

関連情報