使用Newtonsoft.Json.NET搜索JSON根对象的正确JsonPath表达式是什么?

时间:2018-03-24 07:06:59

标签: json filter json.net expression jsonpath

大多数示例都处理book store example from Stefan Gössner,但是我很难为一个简单的对象(没有数组)定义正确的JsonPath表达式:

{ "Id": 1, "Name": "Test" }

检查此json是否包含Id = 1

我尝试了以下表达式:$..?[(@.Id == 1]),但这确实找到了使用Json.NET的任何匹配项?

还尝试Manatee.Json进行解析,看起来jsonpath表达式可能就像$[?($.Id == 1)]一样?

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,理想情况下,该属性仅对一个对象有效。