Erfassen einer Zeichenfolge aus der JSON-Antwort

Erfassen einer Zeichenfolge aus der JSON-Antwort

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.

verwandte Informationen