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'는 이전 부분을 찾되 다음 부분만 일치한다는 의미입니다.

결과적으로 키를 찾고 값(첫 번째 따옴표까지)을 반환합니다.

빠르고, 작고, 간단하며 다양한 키-값 파일 유형에서 작동합니다.

관련 정보