JMES查询:筛选含指定Tag的GlobalNetwork并获取GlobalNetworkId
正确的JMES查询语句及说明
解决后的查询语句
GlobalNetworks[?Tags[?Key=='Name' && Value=='match']].GlobalNetworkId
问题分析
你之前的查询GlobalNetworks[].[Tags[?Key==Name && Value==match]]存在两个关键问题:
- 字符串未加引号:
Name和match是字符串常量,必须用单引号或双引号包裹,否则JMESPath会将其视为变量而非字面量。 - 未过滤顶层数组:该语句仅对每个
GlobalNetwork的Tags做过滤投影,但没有排除本身不符合条件的GlobalNetwork项,导致不匹配的项会返回空数组而非被剔除。
语句拆解
- 过滤符合条件的GlobalNetwork项:
GlobalNetworks[?Tags[?Key=='Name' && Value=='match']]
这里的子查询Tags[?Key=='Name' && Value=='match']会检查当前GlobalNetwork是否存在指定Tag,只要存在匹配的Tag,该项就会被保留到结果集中。 - 投影目标字段:
.GlobalNetworkId
对过滤后的GlobalNetwork项,仅提取GlobalNetworkId字段,得到最终的结果数组。
示例结果
针对你提供的测试数据,执行该查询会返回:
[ "abc", "ghi" ]
内容的提问来源于stack exchange,提问作者Ruskin
相关产品推荐
相关产品推荐

