大多数示例都处理book store example from Stefan Gössner,但是我很难为一个简单的对象(没有数组)定义正确的JsonPath表达式:
{ "Id": 1, "Name": "Test" }
检查此json是否包含Id = 1
。
我尝试了以下表达式:$..?[(@.Id == 1])
,但这确实找到了使用Json.NET的任何匹配项?
还尝试Manatee.Json进行解析,看起来jsonpath表达式可能就像$[?($.Id == 1)]
一样?
答案 0 :(得分:1)
您发布的路径无效。我认为您的意思是$..[?(@.Id == 1)]
(某些字符混乱)。我的答案假设是这样。
您使用的JSON路径表示您要查找的项目应该在数组中。
$ start
.. recursive search (1)
[ array item specification
?( item-based query
@.Id == 1 where the item is an object with an "Id" with value == 1 at the root
) end item-based query
] end array item specification
(1) the conditions following this could match a value no matter how deep in the hierarchy it exists
您只想直接导航对象。使用$.Id
将返回1
,您可以在应用程序中对其进行验证。
所有这些……...
在我看来,您想验证 Id
属性为1
,而不是在数组中搜索Id
属性的对象是1
。为此,您需要JSON Schema,而不是JSON Path。
JSON路径是一种查询语言,用于搜索满足某些条件的值(例如Id == 1
所在的对象。
JSON Schema用于验证JSON是否符合某些要求(您的数据的形状正确)。验证您的对象的值为1
的JSON模式可能类似于
{
"properties": {
"Id": {"const":1}
}
}
授予此权限不是很有用,因为它只会验证Id
属性为1
,理想情况下,该属性仅对一个对象有效。