在JMESPath中设置三元运算符中的空值?



是否有办法将JMESPath的值设置为null ?在我的示例中,如果qux_1不为空,则该值应设置为null,否则该值应设置为baz的值。

我认为三元运算符可以读为如果其他条件,但null将被评估为假?

import jmespath
o = {
"foo": {
"bar": {"baz": 4321},
"bar_1": {"baz_1": {"qux_1": 1234}}
}
}
jmespath.search("(foo.bar_1.baz_1.qux_1 && null)||foo.bar.baz", o)

您实际尝试中的问题是null || `some_value`将始终产生some_value,因为null是一个假值(在某个条件下计算为false)。


你能做的,这里是使用一个过滤器投影。
但是,要做到这一点,首先需要有一个数组——这可以通过to_array函数来实现。

然后,如果foo.bar_1.baz_1.qux_1:

你只需要显示foo.bar.baz
to_array(@)[?foo.bar_1.baz_1.qux_1].foo.bar.baz

要返回到单个值,需要停止投影,然后取结果数组的第一个元素:

to_array(@)[?foo.bar_1.baz_1.qux_1].foo.bar.baz | [0]

请注意,这是一个简单的语法,可能会有一些问题,例如,如果foo.bar_1.baz_1.qux_1 == falsefoo.bar_1.baz_1.qux_1 == null,然后您需要适应您的条件,以您的确切用例:

例如:

to_array(@)[?foo.bar_1.baz_1.qux_1 != null].foo.bar.baz | [0]

最新更新