【问题标题】:Json.NET JsonPath syntax for “does not include”, or negative matching?Json.NET JsonPath 语法“不包含”,还是否定匹配?
【发布时间】:2020-01-08 14:16:10
【问题描述】:

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

我发现 Java JsonPath 支持它

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

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

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

我得到了 ::

"Unexpected character while parsing path query: !"

也试过了::

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

已解析但返回 0 个结果。

【问题讨论】:

标签: c# json.net jsonpath


【解决方案1】:

您可以使用 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" }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多