首页 > 解决方案 > Json.NET JsonPath 语法“不包含”,还是否定匹配?

问题描述

我正在尝试过滤我的 json 中没有“名称”属性的书籍。

我发现它在 Java JsonPath 中受支持

$..book[?(!@.name)]

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

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

我有 ::

"Unexpected character while parsing path query: !"

也试过::

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

已解析但返回 0 个结果。

标签: c#json.netjsonpath

解决方案


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

我不知道你的确切 JSON,所以我模拟了一个简单的例子。如果您发布您的 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" }}

推荐阅读