Dan*_*Dan 7 bash shell json amazon-web-services jq
我正在研究 jq 过滤和结果输出,以输出到另一个接受 JSON 有效负载的程序中。考虑以下示例:
输入:
My-MBP:myorg myname$ aws ec2 describe-snapshots --owner-id 12345678 | jq '.Snapshots[] | select(.Description | contains("myorg-database-b"))'
Run Code Online (Sandbox Code Playgroud)
结果:
{
"Description": "myorg-database-b redacted",
"Encrypted": false,
"VolumeId": "vol-1234",
"State": "completed",
"VolumeSize": 500,
"StartTime": "2018-08-28T17:52:14.000Z",
"Progress": "100%",
"OwnerId": "12345678",
"SnapshotId": "snap-2424"
}
{
"Description": "myorg-database-b redacted",
"Encrypted": false,
"VolumeId": "vol-23456",
"State": "completed",
"VolumeSize": 500,
"StartTime": "2018-08-28T19:01:18.000Z",
"Progress": "100%",
"OwnerId": "12345678",
"SnapshotId": "snap-5535"
}
Run Code Online (Sandbox Code Playgroud)
无论我尝试做什么,我都无法jq打印有效的 JSON,以便将其通过管道传输到另一个程序中。
来自 AWS 的原始 JSON 是一个对象数组,为什么我无法取回有效的对象数组?我在这里做错了什么吗?
以下是 AWS 负载在通过管道输入之前的样子jq:
{
"Snapshots": [
{
"Description": "myorg-database-b redacted",
"Encrypted": false,
"VolumeId": "vol-23456",
"State": "completed",
"VolumeSize": 500,
"StartTime": "2018-08-28T19:01:18.000Z",
"Progress": "100%",
"OwnerId": "12345678",
"SnapshotId": "snap-5535"
},
{
"Description": "myorg-database-b redacted",
"Encrypted": false,
"VolumeId": "vol-23456",
"State": "completed",
"VolumeSize": 500,
"StartTime": "2018-08-28T19:01:18.000Z",
"Progress": "100%",
"OwnerId": "12345678",
"SnapshotId": "snap-5535"
}
]
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。
wei*_*dan 14
您可以将整个 jq 表达式括在方括号中,以使其将过滤器输出收集到数组中(记录在数组构造部分中):
'[ .Snapshots[] | select(.Description | contains("myorg-database-b")) ]'
Run Code Online (Sandbox Code Playgroud)
结果是:
[
{
"Description": "myorg-database-b redacted",
"Encrypted": false,
"VolumeId": "vol-23456",
"State": "completed",
"VolumeSize": 500,
"StartTime": "2018-08-28T19:01:18.000Z",
"Progress": "100%",
"OwnerId": "12345678",
"SnapshotId": "snap-5535"
},
{
"Description": "myorg-database-b redacted",
"Encrypted": false,
"VolumeId": "vol-23456",
"State": "completed",
"VolumeSize": 500,
"StartTime": "2018-08-28T19:01:18.000Z",
"Progress": "100%",
"OwnerId": "12345678",
"SnapshotId": "snap-5535"
}
]
Run Code Online (Sandbox Code Playgroud)