JQ: Получение идентификатора элемента, если он содержит ключ - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь получить список элементов в «Параметрах», которые имеют ключ «По умолчанию»:

{
"Parameters" : {
    "Ecosystem": {
        "Type": "String",
        "Description": "Ecosystem to deploy the resources in to",
        "MinLength": "1"
    },
    "InstanceTenancy": {
        "Type": "String",
        "Description": "EC2 Instance Tenancy",
        "Default": "default",
        "AllowedValues": [
            "default", "dedicated"
        ]
    },
    "InstanceSecurityGroups": {
        "Type": "List<AWS::EC2::SecurityGroup::Id>",
        "Description": "EC2 Instance Security Groups",
        "MinLength": "1"
    },
    "InstanceAmi": {
        "Type": "AWS::EC2::Image::Id",
        "Description": "AMI to deploy to the EC2 instances",
        "Default": "ami-11223344"
    }
}

}

Ближайшее, что я получаю - jq '.Parameters | map_values(has("Default"))'

{
  "Ecosystem": false,
  "InstanceTenancy": true,
  "InstanceSecurityGroups": false,
  "InstanceAmi": true
}

Есть ли способ получить список ключей, соответствующих этому фильтру? например,

"InstanceTenancy"
"InstanceAmi"

1 Ответ

0 голосов
/ 09 января 2019

Использование to_entries позволяет принципиально простое решение:

.Parameters
| to_entries[]
| select(.value | has("Default"))
| .key

Но ваш подход также можно заставить работать:

.Parameters
| map_values(has("Default"))
| keys_unsorted[] as $k
| select(.[$k])
| $k
...