Фильтрация вывода по наличию нескольких пар ключ / значение
Используя JMESPath, возможно ли отфильтровать выходные данные на основе существования нескольких пар ключ / значение внутри входных данных?
Из приведенного ниже примера JSON я хотел бы извлечь только те объекты, которые содержат эти пары ключ / значение в Tags
-
Окружающая среда / Азбука
Проект / Проект2
Самое близкое, что я могу получить, - это выбрать один соответствующий тег, но мне также требуется остальная часть объекта, и мне также нужно сопоставить с другой парой ключ / значение -
Stacks[*].Tags[?Key=='Environment' && Value=='ABC']
Вот некоторые примеры ввода JSON -
{
"Stacks": [
{
"StackId": "abc123",
"Tags": [
{
"Value": "Project 1",
"Key": "Project"
},
{
"Value": "ABC",
"Key": "Environment"
}
],
"CreationTime": "2016-07-20T14:49:27.891Z",
"StackName": "TestStack1",
"NotificationARNs": [],
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": false
},
{
"StackId": "xyz123",
"Tags": [
{
"Value": "Project 1",
"Key": "Project"
},
{
"Value": "XYZ",
"Key": "Environment"
}
],
"CreationTime": "2016-07-20T14:49:27.891Z",
"StackName": "TestStack2",
"NotificationARNs": [],
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": false
},
{
"StackId": "asd123",
"Tags": [
{
"Value": "Project 2",
"Key": "Project"
},
{
"Value": "ABC",
"Key": "Environment"
}
],
"CreationTime": "2016-07-20T14:49:27.891Z",
"StackName": "TestStack3",
"NotificationARNs": [],
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": false
}
]
}
И вот вывод, который мне требуется -
{
"StackId": "asd123",
"Tags": [
{
"Value": "Project 2",
"Key": "Project"
},
{
"Value": "ABC",
"Key": "Environment"
}
],
"CreationTime": "2016-07-20T14:49:27.891Z",
"StackName": "TestStack3",
"NotificationARNs": [],
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": false
}
1 ответ
Решение
Вы можете использовать вложенные фильтры:
Stacks[? Tags[? Value=='ABC' && Key=='Environment']]