JSONPath или JMESPath фильтрация по другому выражению

Я изо всех сил пытаюсь найти способ отфильтровать узлы по другому выражению, а не по строке или числу. Я просмотрел спецификации как для JSONPath, так и для JMESPath и найдите небольшую информацию о невозможности сделать это так, как я пытался.

JSONPath

"С помощью квадратных скобок JSONPath оперируйте с объектом или массивом, адресованным предыдущим фрагментом пути. Индексы всегда начинаются с 0"

Я нашел JSONPath plus, у которого есть свойство @parent, но он, похоже, идет только до непосредственного родителя, и мне нужно получить доступ от root (или подняться по лестнице)

JMESPath

В спецификациях, кажется, указано, что фильтр должен быть expression compare expression, но я не могу заставить его работать. Существует частично связанная проблема и примечание по current_node, хотя мне это немного непонятно.

В конце дня я пытаюсь добиться этого:

Данные

{ 
  level: 20,
  items: [{
    qty: 20,
    id: '123'
  }, {
    qty: 30,
    id: '234'
 }]
}

Выражение:

$.items[?(@.qty==$.level)]

Ожидания

Чтобы получить все элементы с qty, совпадающим с level.

Предложения по достижению этого? Я ищу возможность расширить реализацию JSONPath для себя, поскольку это кажется единственным выходом. Я не так разбираюсь в JMESPath, который я только что обнаружил, поэтому, возможно, действительно есть способ сделать это.


person cyberwombat    schedule 12.10.2019    source источник


Ответы (1)


Что ж, фантастический автор JSONPath plus сразу же добавил функцию @root.

А сейчас:

$.items[?(@[email protected])] // Could use @parent.level for shallow stuff too
person cyberwombat    schedule 13.10.2019
comment
Что-нибудь о JMESPath, пожалуйста? - person Victor; 13.01.2020
comment
@Victor Я перестал смотреть на это, поэтому не уверен. Попутно я обнаружил JSONata, который может быть интересен. Я перешел на него сам. - person cyberwombat; 13.01.2020
comment
Я искал что-то, что предлагало бы реализации как для Node, так и для PHP. Есть идеи, пожалуйста? - person Victor; 13.01.2020
comment
Извините, что нет - я бы подумал, что xpath, поскольку это довольно стандартно. Должны быть приличные библиотеки xpath php - person cyberwombat; 14.01.2020