JsonPath - 将研究限制在一个级别
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"
}
]
但是我需要将我的查询结果限制在没有 children 的一级。最后 3 个元素不是必需的。我只需要第一个元素。
{
"id": 2,
"images": [
{
"id": 1,
"url": "http://url3.jpg"
},
{
"id": 2,
"url": "http://url4.jpg"
}
]
}
正如我的评论中所暗示的,各种 JSONPath 库的实现存在细微差别。相同的语法可能会或可能不会产生相同的结果,具体取决于手头的库。
尽管如此,我们可以通过在根符号后删除点来调整您的查询以使其按预期工作:
$[?(@.id===2)]
注意:我已经使用 Goessner 的 JavaScript 实现测试了上面的路径; C# 等效项应如下所示:$[?(@.id==2)]
.
我正在尝试 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"
}
]
但是我需要将我的查询结果限制在没有 children 的一级。最后 3 个元素不是必需的。我只需要第一个元素。
{
"id": 2,
"images": [
{
"id": 1,
"url": "http://url3.jpg"
},
{
"id": 2,
"url": "http://url4.jpg"
}
]
}
正如我的评论中所暗示的,各种 JSONPath 库的实现存在细微差别。相同的语法可能会或可能不会产生相同的结果,具体取决于手头的库。
尽管如此,我们可以通过在根符号后删除点来调整您的查询以使其按预期工作:
$[?(@.id===2)]
注意:我已经使用 Goessner 的 JavaScript 实现测试了上面的路径; C# 等效项应如下所示:$[?(@.id==2)]
.