如何在嵌套对象中使用 contains 表达式?

How do I do a contains expression in a nested object?

这是我的json

{
  "items": [
      "top": {
        "first": "test",
        "second": {
          "third": "test",
        },
        ...

此 returns 所有 top.first 包含 test 的项目:

items[?contains(top.first, `test`)]

这returns一个错误:

items[?contains(top.second.third, `test`)]

TypeError: contains() expected argument 1 to be type (string | array) but received type null instead.

这适用于显式 ==,但由于某些原因 contains() 抛出上述错误

items[?top.second.third == `test`]

如何在此处查询下一级?

这是我的怀疑:您的 JSON 数组中确实有一些 items 没有 top.second 属性 或没有 top.second.third 属性.

所以,这是我的基础 JSON 尝试重现您的问题,您可以在其中看到我确实有三种情况:

  • 一个元素没有second属性
  • 一个元素带有 second 属性,但没有 third 属性 嵌套在 second
  • 一个元素 second 属性 和 third 属性 嵌套在 second
{
  "items": [
    {
      "top": {
        "first": "test"
      }
    },
    {
      "top": {
        "first": "test",
        "second": {}
      }
    },
    {
      "top": {
        "first": "test",
        "second": {
          "third": "test"
        }
      }
    }
  ]
}

有了这一切,我们可以证明实现你想要的是相当容易的,因为我们只需要在添加之前用一个简单的 [?top.second.third] 首先检查所有那些 属性 确实存在我们的 contains 声明。

以查询结束:

items[?top.second.third && contains(top.second.third, `test`)]

结果如我们所料:

[
  {
    "top": {
      "first": "test",
      "second": {
        "third": "test"
      }
    }
  }
]