如何在嵌套对象中使用 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"
}
}
}
]
这是我的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"
}
}
}
]