如何在 bash 中从 JSON 文档获取值?

如何在 bash 中从 JSON 文档获取值?

我想编写一个脚本来查找 AWS 中未使用的卷。 (已用卷的“状态”为“使用中”)。

例如,当我使用 aws ec2 describe-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"}]}

...这是一个等效文件。

相关内容