如何让jq在应用过滤器后打印有效的json
我正在进行jq过滤,并将结果输出到另一个接受JSON负载的程序中。考虑下面的例子: 输入:如何让jq在应用过滤器后打印有效的json,json,bash,shell,amazon-web-services,jq,Json,Bash,Shell,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"))' 结果: { "Description": "myorg-database-b redacted", "Encryp
My-MBP:myorg myname$ aws ec2 describe-snapshots --owner-id 12345678 | jq '.Snapshots[] | select(.Description | contains("myorg-database-b"))'
结果:
{
"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"
}
无论我尝试做什么,我都无法让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"
}
]
}
任何帮助都将不胜感激。您可以将整个jq表达式包装到方括号中,使其将过滤器输出收集到一个数组中(如中所述): 结果:
[
{
"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"
}
]
问题,如果AWS响应是有效的json,为什么要通过jq来传递它?你可以用直接的AWS响应来输入你想输入的内容。你想得到的输出是什么?就是这样!信不信由你,我一直在制作手册页并搜索谷歌,但这并不容易找到或知道!谢谢这在jq手册的章节中有解释。
[
{
"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"
}
]