我正在使用Python中的JMESPath来高效地解析大型字典/列表。
我有一个字典列表,对于每个字典,我希望获得一个特定的值或返回null并将结果放入一个列表中。也就是说,im从每个字典中选择一个字段,但在字段不存在的情况下包含一个空值。
例如,我的输入是:
[
{
'foo': {'bar': 'yes1'}
},
{
'foo': {'bar': 'yes2'}
},
{
'foo1': {'bar': 'no'}
}
]我想要的结果是:
['yes1', 'yes2', None]因此,对于列表中的每个字典,我想要路径foo.bar,或者如果路径不存在,我希望返回None。我想要的伪JMESPath表达式是:
[*]( foo.bar||`null` )即选择所有列表,然后尝试路径foo.bar或返回文本null。然而,的括号在语法上是不正确的。如何将OR表达式封装在括号中?我得到的最好的JMESPath表达式是:
[*][foo.bar||``][]前两个术语[*][foo.bar||``]将每个元素放入嵌套在list [['yes1'], ['yes2'], ['']]中的列表中,然后[]将返回的列表扁平化。然而,这是相当痉挛的,并阻止我返回一个null,所以我返回一个空字符串。
有人有什么想法吗?我是不是错过了什么语法上的东西?
发布于 2015-10-08 10:14:22
自JMESPATH 0.9以来,添加了一个函数。因此,现在您可以使用下面的表达式来获得所需的结果:
map(&foo.bar, [*])https://stackoverflow.com/questions/32612193
复制相似问题