是否有办法将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 == false
或foo.bar_1.baz_1.qux_1 == null
,然后您需要适应您的条件,以您的确切用例:
例如:
to_array(@)[?foo.bar_1.baz_1.qux_1 != null].foo.bar.baz | [0]