You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Newtonsoft.Json中使用JPath筛选不包含指定属性的结果?

在Json.NET中筛选不包含特定属性的JSON节点

当然可以实现!Json.NET完全支持通过JPath表达式筛选不包含指定属性的节点,只需要在判断条件前加上逻辑非运算符!即可。

针对你给出的示例数据,要筛选所有不包含isbn属性的书籍,只需要把原来的表达式改成:

jToken.SelectTokens("$..book[?(!@.isbn)]")

完整示例代码

为了更清晰地展示效果,这里给出可运行的代码片段:

using Newtonsoft.Json.Linq;
using System;

class Program
{
    static void Main()
    {
        string json = @"{ 
            ""store"": { 
                ""book"": [ 
                    { ""category"": ""reference"", ""author"": ""Nigel Rees"", ""title"": ""Sayings of the Century"", ""price"": 8.95 }, 
                    { ""category"": ""fiction"", ""author"": ""Evelyn Waugh"", ""title"": ""Sword of Honour"", ""price"": 12.99 }, 
                    { ""category"": ""fiction"", ""author"": ""Herman Melville"", ""title"": ""Moby Dick"", ""isbn"": ""0-553-21311-3"", ""price"": 8.99 }, 
                    { ""category"": ""fiction"", ""author"": ""J. R. R. Tolkien"", ""title"": ""The Lord of the Rings"", ""isbn"": ""0-395-19395-8"", ""price"": 22.99 } 
                ], 
                ""bicycle"": { ""color"": ""red"", ""price"": 19.95 } 
            } 
        }";

        JToken jToken = JToken.Parse(json);
        var booksWithoutIsbn = jToken.SelectTokens("$..book[?(!@.isbn)]");

        foreach (var book in booksWithoutIsbn)
        {
            Console.WriteLine($"Title: {book["title"]}, Author: {book["author"]}");
        }
    }
}

代码运行结果

这段代码会输出前两本没有isbn属性的书籍:

Title: Sayings of the Century, Author: Nigel Rees
Title: Sword of Honour, Author: Evelyn Waugh

原理说明

  • @代表当前节点,@.isbn检查当前书籍节点是否包含isbn属性;
  • !是逻辑非运算符,将原来的判断结果取反,从而筛选出不包含该属性的节点;
  • Json.NET的JPath实现完全支持这种逻辑运算,和你用来筛选包含属性的表达式是对称的用法。

内容的提问来源于stack exchange,提问作者luruibo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:57:28