如何使用Python JMESPath在嵌套字典匹配条件后返回指定内部值
JMESPath 条件匹配后返回目标值的正确写法
问题描述
给定数据:
data_case_c = { "qualities": { "id": "0123456789", "key_criteria": "Target", "desired_value": {"id": "987654321", "label": "CORRECT"}, } }
需求:检查qualities.key_criteria是否等于Target,满足条件时返回qualities.desired_value.label的值(即CORRECT)。
尝试的查询语句返回None:
query = "qualities.key_criteria == 'Target' | qualities.desired_value.label"
单独执行条件判断qualities.key_criteria == 'Target'会返回True,但管道后无法得到目标值。
原因分析
JMESPath的管道操作符|是将前一个表达式的输出作为后一个表达式的输入。前半部分返回的是布尔值True,后半部分qualities.desired_value.label在布尔值的上下文中找不到对应属性,因此返回None。
正确解法
方法1:使用三元条件表达式
直接通过条件 ? 真值表达式 : 假值表达式的语法实现,逻辑更直观:
qualities.key_criteria == 'Target' ? qualities.desired_value.label : null
当条件满足时返回CORRECT,不满足时返回null。
方法2:使用过滤投影+取值
将qualities视为单元素数组进行过滤,再提取目标值:
qualities[?key_criteria == 'Target'].desired_value.label | [0]
qualities[?key_criteria == 'Target']过滤出符合条件的对象.desired_value.label提取目标字段,此时结果是数组["CORRECT"]| [0]取出数组中的第一个元素,得到字符串CORRECT
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

