根据多个 key/value 对的存在过滤输出
Filter output based on the existence of multiple key/value pairs
使用 JMESPath,是否可以根据输入中是否存在多个 key/value 对来过滤输出?
从下面的示例 JSON 中,我想做的是仅提取包含 Tags
-
中这些 key/value 对的对象
Environment / ABC
Project / Project2
我能得到的最接近的是 select 单个匹配标签,但我也需要对象的其余部分,而且我还需要匹配另一对 key/value -
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
}
您可以使用嵌套过滤器:
Stacks[? Tags[? Value=='ABC' && Key=='Environment']]
使用 JMESPath,是否可以根据输入中是否存在多个 key/value 对来过滤输出?
从下面的示例 JSON 中,我想做的是仅提取包含 Tags
-
Environment / ABC
Project / Project2
我能得到的最接近的是 select 单个匹配标签,但我也需要对象的其余部分,而且我还需要匹配另一对 key/value -
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
}
您可以使用嵌套过滤器:
Stacks[? Tags[? Value=='ABC' && Key=='Environment']]