1

我在 Python 中使用JMESPath来有效地解析大型字典/列表。

我有一个字典列表,对于每个字典,我想获取某个值或返回null并将结果放入列表中。即即时从每个字典中选择一个字段,但包括一个字段不存在的空值。

例如,我的输入是:

[
    {
        '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||``]将每个元素放入嵌套在列表中的列表中[['yes1'], ['yes2'], ['']],然后[]将返回的列表展平。然而,这很令人困惑,并阻止我返回一个空值,所以我返回一个空字符串。

有没有人有任何想法?我在语法上错过了什么吗?

4

1 回答 1

2

从 JMESPATH 0.9 开始添加了一个map函数。因此,现在您可以使用以下表达式来获得所需的结果:

map(&foo.bar, [*])
于 2015-10-08T10:14:22.657 回答