【发布时间】:2021-10-27 09:42:59
【问题描述】:
我只是在尝试 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 实现和语言/环境?当我使用 Jayway 的 JSONPath 对提供的 JSON 进行查询时,会返回预期的结果。
-
感谢您的反馈我在 C# 上使用“goessner”Jsonpath
-
我测试了 Jayway,就像你说的一样好。 “Jayway JsonPath 是 Stefan Goessner JsonPath 实现的 Java 端口。”那么为什么结果不一样呢?
-
您是说 Atif Aziz 的 Goessner 的 JSONPath 库 (jsonpath.cs) 的 C# 端口吗?我认为这个库有点过时了,你最好使用维护更好的库,比如(Newtonsoft 的)JSON.NET 库。存在差异的原因是,没有 JSONPath 标准之类的东西,库的实现也不同。查看此比较图表,了解各种语言的大量实现之间的差异:cburgmer.github.io/json-path-comparison