如何在JMESPath的三元运算符中设置null值?
在JMESPath中设置null值及条件逻辑实现
核心要点
- JMESPath支持直接返回null值
- 在JMESPath的布尔逻辑中,null会被判定为false,这是你之前代码不符合预期的关键原因
需求实现的正确写法
你的需求是:当qux_1不为null时返回null,否则返回baz的值。应该使用JMESPath的三元条件运算符(condition ? true_expr : false_expr),这是标准的if-else实现方式,表达式如下:
foo.bar_1.baz_1.qux_1 != null ? null : foo.bar.baz
测试验证
修改你的Python测试代码来验证两种场景:
import jmespath # 场景1:qux_1不为null o1 = { "foo": { "bar": {"baz": 4321}, "bar_1": {"baz_1": {"qux_1": 1234}} } } result1 = jmespath.search("foo.bar_1.baz_1.qux_1 != null ? null : foo.bar.baz", o1) print(result1) # 输出: None(对应JMESPath的null) # 场景2:qux_1为null o2 = { "foo": { "bar": {"baz": 4321}, "bar_1": {"baz_1": {"qux_1": None}} } } result2 = jmespath.search("foo.bar_1.baz_1.qux_1 != null ? null : foo.bar.baz", o2) print(result2) # 输出: 4321
原写法不符合预期的原因
你之前使用的(foo.bar_1.baz_1.qux_1 && null)||foo.bar.baz逻辑存在问题:
- 当
qux_1不为null时,qux_1 && null返回null,而null被判定为false,因此null || foo.bar.baz会执行后者,返回baz的值,和你想要的“返回null”完全相反 - 只有当
qux_1为null时,该表达式才会返回baz的值,这部分符合预期,但前半场景逻辑错误
内容的提问来源于stack exchange,提问作者Blob
相关产品推荐
相关产品推荐

