JSON 응답에서 문자열 캡처

JSON 응답에서 문자열 캡처

Bash의 POST 메서드에 대한 Json 응답이 아래에 있으며 이후 값을 캡처하고 싶습니다.세션 ID":"그리고 변수에 할당세션_ID.

{"changeId":"79911476-53a4-46e1-8ffd-422436b51ad1","changeType":"created","record":{"key":"159.65.198.219"}},{"changeId":"bd52dcbd- a5ab-4557-b2b8-88793c2d2964","changeType":"created","record":{"key":"161.35.111.167"}},{"changeId":"f4f5c94e-6c06-473c-b810-b7bbd69c71ad" ,"changeType":"생성됨","기록":{"키":"161.35.123.111"}}],"sessionId":"b7305d77-20f1-4d57-9eb1-9b9fb4f9552d"}

#API 호출

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

에코 $request_post

아래 단계를 완료하려면 도움이 필요합니다.

#응답에서 sessionId를 잘라냅니다.

세션_ID=

 

답변1

json 구조를 구문 분석하는 것은 json 파서로 수행해야 하지만 이와 같은 사소한 경우는 간단한 도구를 사용하여 수행할 수 있으며 대답을 파이프할 수 있습니다 sed. 예를 들면 다음과 같습니다.

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

A는 까지의 모든 항목과 일치하고 "sessionId":", B는 실제 sessionId인 다음의 모든 항목과 일치하며 ", C는 나머지 줄과 일치합니다. B는 에 포함되어 있으므로 \(\)대체에서는 로 참조할 수 있습니다 \1. 따라서 전체 줄은 sessionId로만 대체됩니다.

물론 출력이 여러 줄로 분할되거나 json 형식에서 허용되는 다른 변형을 사용할 수 있는 경우 스크립트는 더 복잡해집니다.

관련 정보