2015-09-16 6 views
1

Im использует JMESPath в Python для эффективного анализа больших словарей/списков.Оператор вложенного OR JMESPath

У меня есть список словарей, для каждого словаря я хотел бы получить определенное значение или вернуть null и поместить результат в список. т. е. выбирать поле из каждого словаря, но включать нулевое значение, в котором поле не существует.

Например, мой вход:

[ 
    { 
     'foo': {'bar': 'yes1'} 
    }, 
    { 
     'foo': {'bar': 'yes2'} 
    }, 
    { 
     'foo1': {'bar': 'no'} 
    } 
] 

Результат я хочу это:

['yes1', 'yes2', None] 

Таким образом, для каждого словаря в списке я хочу путь foo.bar или я хочу вернуть None если путь не существует. Выражение псевдо JMESPath Я хочу:

[*](foo.bar||`null`) 

т.е. выбрать весь список, а затем попробовать путь foo.bar или вернуть буквальный нуль. Однако скобки являются синтаксически неправильными. Как заключить выражение OR в скобки? Лучшее выражение JMESPath I'v получил это:

[*][foo.bar||``][] 

Первые два слагаемых [*][foo.bar||``] места каждого элемента в список вложенных в список [['yes1'], ['yes2'], ['']], то [] сглаживает возвращаемый список. Однако это довольно убедительно и не позволяет мне вернуть нуль, поэтому вместо этого я возвращаю пустую строку.

Есть ли у кого-нибудь идеи? Я что-то пропустил синтаксически?

Спасибо в продвижении.

+0

Это в настоящее время не поддерживается, но я предложил функцию карты(), чтобы добавить к языку, который будет делать это: https: // github.com/jmespath/jmespath.site/issues/15 – jamesls

ответ

1

Поскольку JMESPATH 0.9 a map function был добавлен. Итак, теперь вы можете использовать ниже выражение, чтобы получить желаемый результат:

map(&foo.bar, [*]) 

 Смежные вопросы

  • Нет связанных вопросов^_^