如何让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

我正在进行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",
  "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"
  }
]