【问题标题】:wp rest api filter nested array jmespathwp rest api过滤器嵌套数组jmespath
【发布时间】:2019-06-13 14:33:20
【问题描述】:

我正在尝试使用 Jmespath o 标准内置过滤器字符串过滤 wpapi 请求。

我想用“filters”数组中的一个或多个值检索列表中的所有“id”。 “过滤器”嵌套在“_item_filter-options”下。

例如,我将使用“filters”==409 OR 400 过滤所有 id。

那么用“locations”==217 或其他值过滤所有“id”呢?

你能帮我找到解决办法吗?

[
  {
    "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,
.....

我添加了一些额外的信息,它可能有助于回答我。 我正在使用带有自定义帖子类型“ait-item”和元字段的 ait-club wordpress 主题。

我正在尝试使用 Wordpress Rest API 来获取所有具有某些属性的 ait-item,如纬度、标题、地址等,由 _item_filters-options"->"filters" 过滤。

使用例如http://mydomain/wp-json/wp/v2/ait-item?location=19 IT WORKS(位置是自定义分类法)。如何使用 Jmespath 检索相同的结果?

如何获取 filters=419 或更多值的 ait-item?

对不起,我的英语太少了,谢谢。

编辑: 使用:

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

我可以检索“过滤器”数组的第一个值为 400 的所有“id”。 我无法在整个“过滤器”数组中搜索!!你能帮帮我吗?

编辑:我找到了解决方案:

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

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

现在我正在尝试使用多个值进行过滤。

【问题讨论】:

    标签: wordpress api filter nested jmespath


    【解决方案1】:

    可以像这样对过滤器进行过滤,根据需要使用尽可能多的或运算符|| 以获得您想要的所有选项:

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

    对于位置也是如此:

    [?contains(locations, '217') || ?contains(locations, '<other-value>'].id
    

    【讨论】:

    • 你能给出完整的字符串吗?我试过了,但有一些 sintax 错误
    • 我可以在 jmespath.org 上使用它。在将其发送到 API 之前,您可能需要对其进行 URL 编码?
    • 这行得通: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')]&amp;&amp;[contains("_ait-item_filters-options".filters,'531')] 我需要询问带有一个和/或多个过滤器的项目。
    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2017-01-28
    • 2019-07-19
    • 1970-01-01
    • 2022-08-19
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多