首页 > 其他分享 >SelectToken的使用

SelectToken的使用

时间:2024-07-18 23:09:22浏览次数:12  
标签:SelectToken title 查询 JSON JSONPath 使用 JToken

SelectToken 是 Json.NET(现在通常称为 Newtonsoft.Json)库中的一个非常有用的方法,它允许你以 JSONPath 的形式查询 JSON 对象或数组,从而获取到你感兴趣的部分。JSONPath 是一种类似于 XPath 的查询语言,用于从 JSON 文档中抽取信息。

使用方法
当你有一个 JObject 或 JArray(或任何实现了 JToken 接口的对象)时,你可以调用 SelectToken 方法并传入一个 JSONPath 字符串作为参数。如果查询成功,SelectToken 将返回一个 JToken 对象,它代表了查询结果;如果查询失败(即没有找到匹配的元素),则返回 null。

示例
假设你有以下 JSON 字符串:

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
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
你可以使用 SelectToken 来查询这个 JSON 对象中的特定部分。以下是一些示例:

csharp
using Newtonsoft.Json.Linq;

// 假设 jsonString 是包含上述 JSON 的字符串
string jsonString = ...; // 你的 JSON 字符串
JObject jsonObject = JObject.Parse(jsonString);

// 查询第一个书的标题
string title = (string)jsonObject.SelectToken("$.store.book[0].title");
Console.WriteLine(title); // 输出: Sayings of the Century

// 查询所有书的标题
JArray titles = (JArray)jsonObject.SelectToken("$.store.book[*].title");
foreach (JToken titleToken in titles)
{
Console.WriteLine(titleToken);
}
// 输出:
// Sayings of the Century
// Sword of Honour

// 查询自行车的价格
double? bicyclePrice = (double?)jsonObject.SelectToken("$.store.bicycle.price");
Console.WriteLine(bicyclePrice); // 输出: 19.95

// 尝试查询一个不存在的属性,将返回 null
JToken nonExistent = jsonObject.SelectToken("$.store.nonExistent");
Console.WriteLine(nonExistent); // 输出: null
注意事项
SelectToken 方法对于快速地从大型 JSON 文档中检索数据非常有用。
当你确信查询结果将返回特定类型的 JToken(如 JArray 或 JValue)时,你可以使用显式类型转换来获取更具体的类型。但是,如果查询可能返回 null,你应该使用可空类型(如 double?)来避免空引用异常。
JSONPath 表达式可以非常复杂,包括过滤、递归下降等高级功能。你可以查阅相关的 JSONPath 文档来了解更多信息。

标签:SelectToken,title,查询,JSON,JSONPath,使用,JToken
From: https://www.cnblogs.com/summer-xiachun/p/18310563

相关文章

  • xhdra的使用记录
    XHydra是一个基于Hydra的分布式密码破解工具,用于进行暴力破解攻击。以下是在KaliLinux中使用XHydra的完整步骤和命令,以及一个示例:安装XHydra:在KaliLinux中,XHydra通常已经预装在系统中。如果没有安装,可以使用以下命令进行安装:sudoapt-getupdatesudoapt-getinstall......
  • 使用结构体编写学生管理系统
    #include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX100//使用结构体完成学生(学号、姓名、性别、成绩)管理系统//1>功能1:输入学生信息//2>功能2:输出学生信息//3>功能3:删除指定学生数据//4>功能4:修改学生数据//5>功能......
  • 一些操作线性表的函数及使用方法
    线性表的增删查改头文件seqlist.h#ifndefSEQLIST#defineSEQLIST//#include<myhead.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAXSIZE100typedefintdatatype;typedefstruct{datatypedata[MAXSIZE];in......
  • xxl-job使用记录
    xxl-job对比@Scheduled的优势:xxl-job在分布式环境下不会重复执行,@Scheduled只适用单节点应用,不能在多节点环境用。xxl-job有页面,能传参,能配置多任务顺序执行1、github下载xxl-job项目 https://github.com/xuxueli/xxl-job/2、修改项目的配置文件,数据库,端口,日志路径等3、自己项......
  • SOLIDWORKS 无法获得下列许可 SOLIDWORKS Standard。无效的 (不一致的) 使用许可号码
    1.找到下图安装包中的文档  打开文件夹,将下图中箭头所指的文件复制到安装目录中 复制到安装目录的SOLIDWORKS文件加下  重启电脑后,打开软件即可正常进入转载:https://blog.csdn.net/q18335189155/article/details/126897234 ......
  • C# 使用is模式匹配
    类型检查和转换:当你需要检查对象是否为特定类型,并且希望在同一时间内将其转换为那个类型时,模式匹配提供了一种更简洁的方式来完成这一任务,避免了使用传统的as和is操作符后还需要进行额外的null检查。复杂条件逻辑:在处理复杂的条件逻辑时,特别是涉及到多个条件和类型的情况下,使......
  • c++ primer plus 第16章string 类和标准模板库,16.2.1 使用智能指针
    c++primerplus第16章string类和标准模板库,16.2.1使用智能指针c++primerplus第16章string类和标准模板库,16.2.1使用智能指针文章目录c++primerplus第16章string类和标准模板库,16.2.1使用智能指针16.2.3uniqueptr为何优于autoptr16.2.3unique......
  • java map 是线程安全吗 map的线程安全实现类 推荐使用 ConcurrentHashMap
    javamap是线程安全吗map的线程安全实现类推荐使用ConcurrentHashMapHashMap线程安全的吗?Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的。看下面两个场景:1、当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全......
  • 如何在QT使用定时器
    最近得我再学习如何使用QT来编写计时器,也学习到2种图片的显示方式:Qobject定时器1.通过Qobject来做定时器,首先,我们需要在Headers里需要添加来设置一个计时器,计时多长时间,它是以毫秒为单位的,这边我们以1000毫秒为例,#defineTIMEOUT1*1000在开启计时器的时候,开始计时器,我们使......
  • 使用Emgu.CV开发视频播放器简述
    OpenCV是大名鼎鼎的视觉处理库,其对应的c#版本为Emgu.CV。本人采用Emgu.CV开发了一款视频播放软件,可对本地视频文件和rstp在线视频流播放,还具有对视频局部区域放大功能。虽然功能比较简陋,但是已具备了视频播放的基本功能。Emgu.CV虽然对很多功能有了很好的封装,但在使用过程中还......