JSONPath — выражение фильтра не работает должным образом

Не удается заставить JSONPath работать.

JSON:

{
  "data": [
    {
      "meta": {
        "definition": {
          "title": "ID",
          "type": "text",
          "key": "657876498"
        }
      },
      "attributes": {
        "id": "8606798",
        "name": "ID",
        "content": {
          "value": "ABC"
        }
      }
    }
  ]
}

Дорожка:

$.data[*].attributes[?(@.name=='ID')]

Что не возвращает совпадений на jsonpath.com или с использованием jsonpath-ng в python.

Чего мне принципиально не хватает, что этот фильтр не работает?

Примечание. Конечной целью будет получение name и content.value.

РЕДАКТИРОВАТЬ:

На https://jsonpath.herokuapp.com/ путь действительно работает. хм... зависит от реализации?


person beginner_    schedule 10.03.2021    source источник


Ответы (2)


Действительно, это похоже на особенность реализации jsonpath-ng. Похоже, что операцию фильтра можно использовать только для списков , то есть итерируемый.

В качестве обходного пути мы можем фильтровать массив data и вместо этого извлекать attributes:

$.data[?(@.attributes.name="ID")].attributes

Это дает тот же результат, что и JsonPath Jayway, используя ваш путь; однако этот подход не может быть удовлетворительным во всех ситуациях.

person wp78de    schedule 15.03.2021

Пожалуйста, попробуйте указанные ниже пути для name и content.value

$.data[:0].attributes.name
$.data[:0].attributes.content.value
person pratap    schedule 10.03.2021
comment
И где фильтр? проблема в фильтре, поскольку это актуально - person beginner_; 10.03.2021
comment
$.data[?(@.attributes.name==ID)] Я думал, что конечная цель — получить значения. @buran уже предоставил детали фильтра. - person pratap; 10.03.2021