Bash의 JSON 문서에서 가치를 얻는 방법은 무엇입니까?

Bash의 JSON 문서에서 가치를 얻는 방법은 무엇입니까?

AWS에서 사용되지 않은 볼륨을 찾는 스크립트를 작성하고 싶습니다. (사용된 볼륨의 "상태"는 "사용 중"입니다.)

예를 들어, aws ec2 explain-volumes --filters Name=status,Values=available을 사용하면 다음 응답을 받습니다.

{ "Volumes": [ { "Attachments": [], "AvailabilityZone": "us-east-1a", "CreateTime": "2022-04-21T08:45:29.704000+00:00", "Encrypted": false, "Size": 1, "SnapshotId": "", "State": "available", "VolumeId": "vol-0e81644ad6193439f", "Iops": 100, "Tags": [ { "Key": "sre", "Value": "test" } ], "VolumeType": "gp2", "MultiAttachEnabled": false } ] }

상태, VolumeId 및 레이블을 저장하고 싶습니다.

답변1

이 작업을 수행하는 명령을 사용할 수 없다고 가정하면 aws개인적으로 JSON 파서를 사용하여 jq필요한 데이터를 추출합니다.

jq '.Volumes[] | { State: .State, VolumeId: .VolumeId, Tags: .Tags }'

배열의 각 항목에 대해 Volumes해당 항목에서 유지하려는 필드만 포함하는 새 JSON 개체가 생성됩니다.

주어진 JSON 문서를 입력으로 사용하면 다음과 같은 결과가 발생합니다.

{
  "State": "available",
  "VolumeId": "vol-0e81644ad6193439f",
  "Tags": [
    {
      "Key": "sre",
      "Value": "test"
    }
  ]
}

또는 다음을 사용하는 경우 jq -c:

{"State":"available","VolumeId":"vol-0e81644ad6193439f","Tags":[{"Key":"sre","Value":"test"}]}

...동등한 파일입니다.

관련 정보