我只是在尝试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)]
.