Как я могу запросить несколько полей массива объектов? - PullRequest
2 голосов
/ 19 апреля 2019

Я запрашиваю выход CLI AWS согласно json ниже.

{
"Aliases": [
    {
      "AliasName": "alias/ab1",
      "AliasArn": "arn:aws:kms:eu-west-1:123:alias/key1",
      "TargetKeyId": "66"
    },
    {
      "AliasName": "alias/ab2",
      "AliasArn": "arn:aws:kms:eu-west-1:123:alias/key2",
      "TargetKeyId": "77"
    },
    {
      "AliasName": "alias/ab3",
      "AliasArn": "arn:aws:kms:eu-west-1:123:alias/key3",
      "TargetKeyId": "88"
    },
    {
      "AliasName": "alias/ab4",
      "AliasArn": "arn:aws:kms:eu-west-1:123:alias/aws/key4",
      "TargetKeyId": "99"
    }
  ]
}

С запросом

.Aliases[] | (.AliasArn | select(contains(":alias/aws/") | not) ) 

Но это только поле AliasArn, TargetKeyId также требуется. Есть идеи как вытащить оба поля?

"arn:aws:kms:eu-west-1:123:alias/key1"
"arn:aws:kms:eu-west-1:123:alias/key2"
"arn:aws:kms:eu-west-1:123:alias/key3"

Ответы [ 3 ]

1 голос
/ 22 апреля 2019

Строковая интерполяция будет работать для этого.

Меня вызвали AWS CLI list-aliases напрямую, и я отправил его в jq, использовал фильтр выбора / содержит и передал его, используя строковую интерполяцию для вывода.

aws kms list-aliases |jq -r '.Aliases[] |select (.AliasArn |contains(":alias/aws/") | not) | "AliasArn: \(.AliasArn)\t\tTargetKeyId: \(.TargetKeyId)"'

Я добавил в вывод несколько вкладок для удобства чтения.

Ссылки

https://stedolan.github.io/jq/manual/

0 голосов
/ 24 апреля 2019

Вы очень близки к решению.Вам просто нужно добавить поле, которое вы хотите получить в свой фильтр:

.Aliases[]|select(.AliasArn|contains(":alias/aws")|not) |.AliasArn,.TargetKeyId
0 голосов
/ 24 апреля 2019

Спасибо, Кенлукас, который ударил по ногте на голове.

Я сделал небольшое уточнение, чтобы просто захватить описание псевдонима вместе с ключом, как показано здесь -

aws kms list-aliases |jq -r '.Aliases[] |select (.AliasArn |contains(":alias/aws/") | not) | "AliasArn: \(.AliasArn | split("/")[1])\t\tTargetKeyId: \(.TargetKe yId)"'
...