Json.NET JsonPath 语法是“不包含”,还是否定匹配?

Json.NET JsonPath syntax for “does not include”, or negative matching?

我正在尝试过滤 json 中没有 "name" 属性.

的图书

我发现 Java JsonPath

支持它
$..book[?(!@.name)]

但是当我在 C# 中使用它时 ::

json.SelectTokens("$..book[?(!@.name)]")

我得到了::

"Unexpected character while parsing path query: !"

也尝试过::

json.SelectTokens("$..book[?(@.name == null)]")

已解析但返回 0 个结果。

您可以使用 LINQ 语法获取不包含 属性 的标记。

我不知道你的确切 JSON 所以我模拟了一个简单的例子。如果您 post 您的 JSON 我将更新我的答案以与您的特定 JSON 一起使用。

测试JSON:

JObject o = JObject.Parse(@"{
        'books': [
            {'book':{'name':'some book name 1', 'author':'bob smith'}},
            {'book':{'author':'mary smith'}}
            ]}");

没有name如何获得代币 属性:

var result = o.SelectTokens("books[*].book").Where(t => t["name"] == null);

// result = {{  "author": "mary smith" }}