Ich habe unten eine JSON-Antwort für die POST-Methode in Bash und möchte den Wert danach erfassenSession-ID":"und weisen Sie es der Variablen zuSession-ID.
{"changeId":"79911476-53a4-46e1-8ffd-422436b51ad1","changeType":"erstellt","record":{"key":"159.65.198.219"}},{"changeId":"bd52dcbd-a5ab-4557-b2b8-88793c2d2964","changeType":"erstellt","record":{"key":"161.35.111.167"}},{"changeId":"f4f5c94e-6c06-473c-b810-b7bbd69c71ad","changeType":"erstellt","record":{"key":"161.35.123.111"}}],"Sitzungs-ID": "b7305d77-20f1-4d57-9eb1-9b9fb4f9552d"}
#API-Aufruf
request_post="$(curl --insecure --request POST "Endpunkt-URL")"
echo $Anfrage_Post
Ich brauche Hilfe, um den folgenden Schritt abzuschließen
#Sitzungs-ID aus der Antwort herausschneiden
Sitzungs-ID=
Antwort1
Während das Parsen von JSON-Strukturen von einem JSON-Parser durchgeführt werden sollte, können triviale Fälle wie dieser mit einem trivialen Tool erledigt werden und Sie können die Antwort weiterleiten sed
, zum Beispiel:
sed 's/.*"sessionId":"\([^"]*\).*/\1/'
\______________/ \___/ \/
A B C
A stimmt mit allem bis einschließlich überein "sessionId":"
, B stimmt mit allem überein, das auf nicht- folgt "
, was die eigentliche Sitzungs-ID ist, und C stimmt mit dem Rest der Zeile überein. B ist in enthalten \(\)
, daher kann beim Ersetzen als darauf verwiesen werden \1
. Daher wird die gesamte Zeile nur durch die Sitzungs-ID ersetzt.
Wenn die Ausgabe auf mehrere Zeilen aufgeteilt werden kann oder andere vom JSON-Format zugelassene Variationen verwendet, wird das Skript natürlich komplizierter.