Фильтрация JSONPath или JMESPath по другому выражению - PullRequest
0 голосов
/ 12 октября 2019

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

JSONPath

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

Я нашел JSONPathплюс, который имеет свойство @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, который я только что обнаружил, так что, возможно, на самом деле есть способ сделать это.

1 Ответ

0 голосов
/ 13 октября 2019

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

Так что теперь:

$.items[?(@.qty==@root.level)] // Could use @parent.level for shallow stuff too
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...