JsonPath - Restrict To Research to One level



我只是在尝试JsonPath。这很好,但我有一个特殊的问题。

所以,我的JSON文件在下面:
[
{
"id": 1,
"images": [
{ "id": 1,"url": "http://url1.jpg" },
{ "id": 2,"url": "http://url2.jpg" }
]
},
{
"id": 2,
"images": [
{ "id": 1,"url": "http://url3.jpg" },
{ "id": 2,"url": "http://url4.jpg" }
]
},
{
"id": 3,
"images": [
{ "id": 1,"url": "http://url5.jpg" },
{ "id": 2,"url": "http://url6.jpg" }
]
}
]

对于表达式$.[?(@.id=='2')],结果是

[
{
"id": 2,
"images": [
{
"id": 1,
"url": "http://url3.jpg"
},
{
"id": 2,
"url": "http://url4.jpg"
}
]
},
{
"id": 2,
"url": "http://url2.jpg"
},
{
"id": 2,
"url": "http://url4.jpg"
},
{
"id": 2,
"url": "http://url6.jpg"
}
]

但是我需要将我的查询结果限制在一个没有子节点的级别。最后3个元素是不必要的。我只需要第一个元素

{
"id": 2,
"images": [
{
"id": 1,
"url": "http://url3.jpg"
},
{
"id": 2,
"url": "http://url4.jpg"
}
]
}

正如我在评论中所暗示的那样,各种JSONPath库的实现存在细微的差异。相同的语法可能产生相同的结果,也可能不产生相同的结果,这取决于手头的库。

尽管如此,我们可以通过在根符号后面去掉点来调整您的查询,使其按预期工作:

$[?(@.id===2)]

注意:我已经使用Goessner的JavaScript实现测试了上面的路径;c#对应的代码应该是这样的:$[?(@.id==2)].

最新更新