텍스트 파일에 포함된 JSON 문서에서 필드 추출

텍스트 파일에 포함된 JSON 문서에서 필드 추출

다음 텍스트 줄이 있고 이 텍스트 줄의 JSON 부분에서 일부 필드를 추출해야 합니다.

June 27th 1997, 10:11:52.621 {"serviceId":"00034","AccessKey":"SBCDSCB","trackID":"KOLPSLSLSLL99029283","membersId":"TEST_0002930493","shopperInfo":{"emailid":"[email protected]"},"parkid":{"parkssID":"carrier-park"},"cartinfo":{"checkType":"preorder","detailsmetis":"card","currency":"US","grosscount":"10","reedeem":".00","discount":".00","tokenvalue":{"token":"11102020392023920920393993","bin":"00000000","digit":"0000","expirationDate":"202209","price":"10"}},"cartdetails":[{"dones":[{"donesnames":"test","price":"003","qunt":"1"}]}]}

필요한 출력은 다음과 같습니다.

serviceId,trackID,currency,grosscount 
00034,KOLPSLSLSLL99029283,US,10

위와 같은 결과를 얻을 수 있는 방법을 제안해주세요.

awk해당 명령과 일부 관련 쿼리를 사용해 보았지만 sed제대로 작동하지 못했습니다.

답변1

사용 jq:

echo "serviceId,trackID,currency,grosscount"
cut -d' ' -f5- < file \
| jq -r '[.serviceId, .trackID,.cartinfo.currency,.cartinfo.grosscount] | @csv'

를 사용하는 대신 @csv다음을 사용하여 필드 주위에 따옴표를 추가할 수도 있습니다 paste.

echo "serviceId,trackID,currency,grosscount"
cut -d' ' -f5- < file \
| jq -r '.serviceId, .trackID,.cartinfo.currency,.cartinfo.grosscount' \
| paste -sd,

답변2

JSON이 포함된 JSON 문서와 동일한 구조를 가지고 있다고 가정합니다.다른 질문, 우리는 사용할 수 있습니다jq내가 거기에 넣은 것과 같은 명령:

jq -r '
    [ "serviceId", "trackID", "currency", "grosscount" ],
    [ .serviceId, .trackID, .cartinfo.currency, .cartinfo.grosscount ] |
    @csv'

{여기서 누락된 유일한 것은 첫 번째 온라인 데이터 이전에 JSON이 아닌 데이터를 제거하는 것입니다. 우리는 할 수있어 sed:

sed 's/^[^{]*//' file |
jq -r '
    [ "serviceId", "trackID", "currency", "grosscount" ],
    [ .serviceId, .trackID, .cartinfo.currency, .cartinfo.grosscount ] |
    @csv'

질문의 데이터를 고려하면 다음과 같습니다.

"serviceId","trackID","currency","grosscount"
"00034","KOLPSLSLSLL99029283","US","10"

관련 정보