wp rest api filter вложенный массив jmespath

Я пытаюсь отфильтровать запрос wpapi, используя Jmespath или стандартную встроенную строку фильтра.

Я хотел бы получить все «id» в списке с одним или несколькими значениями в массиве «filters». «Фильтры» вложены в «_item_filter-options».

Например, я бы отфильтровал все идентификаторы с помощью «фильтров» == 409 ИЛИ 400.

А как насчет фильтрации всех «id» с «locations» == 217 ИЛИ другим значением?

Не могли бы вы помочь мне найти решение?

[
  {
    "id": 2608,
    "date": "2018-08-18T12:53:16",
    "date_gmt": "2018-08-18T10:53:16",
    "ait-locations": [
      217,
      19
    ],
    "ait_item_filters-options": {
      "filters": [
        "419",
        "400",
        "409",
        "418",
        "531",
        "403",
        "408",
        "575"
      ]
    },

  },
  {
    "id": 2588,
.....

Я добавляю дополнительную информацию, это может помочь мне ответить. Я использую тему wordpress ait-club с пользовательским типом сообщений «ait-item» и мета-полями.

Я пытаюсь использовать Wordpress Rest API, чтобы ПОЛУЧИТЬ все элементы ait с некоторыми свойствами, такими как широта, заголовок, адрес и т. д., отфильтрованные с помощью _item_filters-options" -> "filters".

Используя, например, http://mydomain/wp-json/wp/v2/ait-item?location=19 ЭТО РАБОТАЕТ (местоположение является пользовательской таксономией). Как я могу получить тот же результат с помощью Jmespath?

Как получить ait-item с фильтрами = 419 или более значений?

Извините за мой маленький английский, спасибо.

Изменить: Использование:

https://www.mydomain.it/wp-json/wp/v2/ait-item?_query=[?_item_filters-options.filters[0]=='400']

я могу получить все «id», где первое значение массива «filters» равно 400. Я не могу искать во всем массиве «filters»!! Не могли бы вы помочь мне?

РЕДАКТИРОВАТЬ: я нашел решение, используя:

https://www.areepicnic.it/wp-json/wp/v2/ait-item?_query=[?"_ait-item_filters-options".filters[?@=='400']]

or

https://www.areepicnic.it/wp-json/wp/v2/ait-item?_query=[?"_ait-item_filters-options".filters[?contains(@,'397')]]

теперь я пытаюсь фильтровать с несколькими значениями.


person Tore78    schedule 19.01.2019    source источник


Ответы (1)


Фильтрация может быть выполнена для фильтров таким образом, используя столько операторов или операторов ||, сколько необходимо, чтобы получить все параметры, которые вы хотели бы получить:

[?contains(_item_filters-options.filters, '409') || contains(_item_filters-options.filters, '400')].id

и аналогично для местоположений:

[?contains(locations, '217') || ?contains(locations, '<other-value>'].id
person Marcus    schedule 21.01.2019
comment
Не могли бы вы дать полную строку? Я попытался, но с некоторой синтаксической ошибкой - person Tore78; 22.01.2019
comment
Я могу использовать его как есть на jmespath.org. Возможно, вам потребуется кодировать URL-адрес перед отправкой в ​​​​API? - person Marcus; 22.01.2019
comment
Это работает: https://www.areepicnic.it/wp-json/wp/v2/ait-item?_query=[?contains("_ait-item_filters-options".filters,'418')] но это дает мне неверный результат: https://www.areepicnic.it/wp-json/wp/v2/ait-item?_query=[?contains("_ait-item_filters-options".filters,'475')]&&[contains("_ait-item_filters-options".filters,'531')] Мне нужно запросить элементы с одним И/ИЛИ несколькими фильтрами. - person Tore78; 23.01.2019