HTTP応答で返されたJSONからUUID値を抽出する

HTTP応答で返されたJSONからUUID値を抽出する

応答から serviceUuid を取得し、使用するシェルスクリプトの小さなスクリプトを作成しようとしています。 Final.txtというファイルにサーバー応答を印刷しました。 「serviceUuid」の次の値を抽出する必要があります。

スクリプトは次のとおりです。

uuid=$(curl   -X POST -H "ACCEPT-LANGUAGE:en"   -H "Content-Type: application/json"   -H "Accept: application/json" -d  {"username":"HereThereIsTheUsername"}  Here there is the url )

echo $uuid >> final.txt

応答は次のとおりです。

{"status":{"code":"STATUS_OK","message":"ServiceUUID sent successfully via..."},"body":{"data":{"userApps":{},"username":"HereTheUsername","fullName":"NameOfTheAccountPossessor","lang":"sq","blocked":false,"lastLogin":"2016-10-10T17:19:22","passwordResetUuid":"6147dc32-b72e-450a-8084-2fdb5319a931","userAccessLevel":5,"countDownSeconds":0,"serviceUuid":"7260276c-5c3f-41d3-9329-3603acecb7e5","userAttributes":{},"labelMap":{},"id":"APPUSER00000012","someLabel":"NameOfTheOrganisation"}}}

だから誰も私が価値を抽出するのに役立ちますか?

答え1

JSON解析ツールです。次のことができます。

uuid=$(curl ...)
service_uuid=$(jq -r '.body.data.serviceUuid' <<<"$uuid")
echo "$service_uuid"
7260276c-5c3f-41d3-9329-3603acecb7e5

答え2

「serviceUuid」の次の値を抽出する必要があります。

したがって、変数に$uuid次のものが含まれている場合:

echo "$uuid"
{"status":{"code":"STATUS_OK","message":"ServiceUUID sent successfully via..."},"body":{"data":{"userApps":{},"username":"HereTheUsername","fullName":"NameOfTheAccountPossessor","lang":"sq","blocked":false,"lastLogin":"2016-10-10T17:19:22","passwordResetUuid":"6147dc32-b72e-450a-8084-2fdb5319a931","userAccessLevel":5,"countDownSeconds":0,"serviceUuid":"7260276c-5c3f-41d3-9329-3603acecb7e5","userAttributes":{},"labelMap":{},"id":"APPUSER00000012","someLabel":"NameOfTheOrganisation"}}}

...あなたはただ価値を望むにはserviceUuid

echo "$uuid" | sed -nE 's/.*"serviceUuid":"(.*)","user.*/\1/p'
7260276c-5c3f-41d3-9329-3603acecb7e5

あなたの場合は次のとおりです。

echo "$uuid" | sed -nE 's/.*"serviceUuid":"(.*)","user.*/\1/p' >> final.txt

...ファイルに追加final.txt


sed --version
sed (GNU sed) 4.2.2

答え3

「jq」もなく、引用エスケープの問題もありません。この高速で簡単なソリューションを試してください...

service_uuid=$( grep -oP '"serviceUuid":"\K[^"]+'  <<< "$uuid" )
  • <<< "$uuid「grep」に文字列を入力してください。
  • -oP オプションは、perl 正規表現の「一致する部分」のみが返されることを意味します。
  • perl-RE の '\K' は前の部分を検索し、次の部分だけが一致するという意味です。

その結果、キーを見つけて値(最初の引用符まで)を返します。

高速、小さく、シンプルで、さまざまなKey-Valueファイルタイプで動作します。

関連情報