当前位置: 首页 > news >正文

Newtonsoft.Json笔记 -JToken、JObject、JArray详解

Newtonsoft.Json(Json.NET)核心概念与高级用法笔记

一、JSON 解析的核心过程

当我们调用:

JObject obj = JObject.Parse(jsonString);

Json.NET 会执行以下过程:

  1. 解析 JSON 文本字符串(如 "{ "name": "Yty", "info": { "age": 25 } }");
  2. 构建一棵 JSON 对象树(DOM)
  3. 树中每个节点都用特定的类(JObjectJPropertyJValue 等)来表示;
  4. 这些对象彼此通过父子关系相连,形成层级化的结构,方便访问、修改和查询。

🧱 示例结构映射:

{"user": {"name": "Yty","info": { "age": 25 }}
}

会被解析成:

JObject (根)
└── JProperty("user")└── JObject├── JProperty("name") → JValue("Yty")└── JProperty("info")└── JObject└── JProperty("age") → JValue(25)

在代码中:

JObject root = JObject.Parse(json);
JObject user = (JObject)root["user"];
Console.WriteLine(user["name"]);  // "Yty"

每个 { ... } 对应一个 JObject;
每个 "key": value 对应一个 JProperty;
每个最终的值(字符串、数字、布尔)是一个 JValue。


二、核心类型结构

JToken                 // 所有 JSON 节点的抽象基类├── JValue            // 原子值(string、int、bool、null 等)├── JContainer        // 可包含子节点的容器│    ├── JObject      // 对象 { ... },由多个 JProperty 组成│    ├── JArray       // 数组 [ ... ]│    └── JConstructor // 少用└── JProperty         // 键值对 "key": value

层次逻辑:

  • JObject → 多个 JProperty;
  • JProperty → Name + Value;
  • Value 仍是一个 JToken(可能是 JObject / JArray / JValue)。

三、JObject 遍历与访问

1️⃣ 遍历属性

foreach (JProperty prop in obj.Properties())Console.WriteLine($"{prop.Name}: {prop.Value}");

2️⃣ 像字典一样遍历

foreach (var kv in obj)Console.WriteLine($"{kv.Key}: {kv.Value}");

3️⃣ 递归遍历嵌套对象

void Traverse(JObject o)
{foreach (var p in o.Properties()){if (p.Value.Type == JTokenType.Object)Traverse((JObject)p.Value);elseConsole.WriteLine($"{p.Name}: {p.Value}");}
}

四、JToken 的多态特性

JToken 是所有节点的基类。
使用 JToken 参数可以编写能处理任意 JSON 节点类型的通用方法:

void Print(JToken token)
{switch (token.Type){case JTokenType.Object:foreach (var p in ((JObject)token).Properties())Print(p);break;case JTokenType.Property:var prop = (JProperty)token;Console.WriteLine($"{prop.Name}:");Print(prop.Value);break;case JTokenType.Array:foreach (var item in (JArray)token)Print(item);break;default:Console.WriteLine(token.ToString());break;}
}

💡 通过多态,Print() 可递归处理任意 JSON 节点(对象、数组、值)。


五、嵌套对象关系与代码对应

JSON 片段 对应对象类型 C# 表达式示例
{ ... } JObject var o = JObject.Parse(json)
"key": value JProperty o.Properties()
"name": "Yty" JProperty + JValue prop.Value
"info": { "age": 25 } JProperty + JObject (JObject)prop.Value
25 JValue (int)prop.Value

六、常用高级技巧

功能 方法 示例
解析 JSON JObject.Parse(json) 创建 JObject
路径访问 SelectToken("$.user.info.age") 支持 JSONPath
动态访问 dynamic person = JObject.Parse(...); person.name 简洁
合并对象 obj1.Merge(obj2) 合并两个 JObject
判断类型 token.Type == JTokenType.Object 类型判断
修改值 prop.Value = new JValue(123) 动态修改

七、一句话总结

  • JSON 文本解析后被表示为一棵 JToken 树
  • 每个 {} 是一个 JObject,每个 "key": value 是一个 JProperty
  • 值部分(value)可再是 JObjectJArrayJValue
  • JToken 作为统一父类,使方法能对所有节点类型多态处理。
  • 嵌套 JSON 结构就是 JObject 套 JObject
http://www.hskmm.com/?act=detail&tid=35025

相关文章:

  • 2025 最新活动跟拍直播公司推荐榜:广告影视圈权威评选,揭秘五大高性价比品牌覆盖西安及全国市场,会展 / 企业 / 赛事场景优选
  • 2025 年宣传片拍摄制作公司最新推荐排行榜:覆盖多领域优质服务商,助企业精准选靠谱合作伙伴
  • 02-02串口-USART模块
  • CF2110E Melody
  • 进化计算入门
  • 02-01串口理论知识
  • 赋能安全管控:NVR接入录像回放平台EasyCVR加油站监控应用场景与实际功能
  • .Net 自定义定时器
  • 2025年项目管理工具生态全景:技术主权与AI赋能的行业变革
  • 深度学习
  • Microsoft 代理框架简介(预览版):让每个开发人员都能轻松使用 AI 代理
  • 2025 年破碎机厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析圆锥/辊式/对辊/煤矸石/砂石破碎机厂家推荐
  • 站位3
  • AI 的能源危机:训练一个模型究竟要耗掉多少电?
  • 2025 年制砂机厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析高效/冲击式/砂石/新疆制砂机厂家推荐
  • 拆解3D Gaussian Splatting:原理框架、实战 demo 与自驾仿真落地探索!
  • WebSocket Turbo Intruder:挖掘WebSocket安全漏洞的利器
  • Gitee:本土化技术平台如何重塑中国开发者生态
  • Hyper-V 与 root的Android7模拟器共存
  • 视频监控界的“万能翻译器”:视频汇聚平台EasyCVR视频接入功能全解读
  • 基于Ubuntu22.04 部署Dify详细教程
  • Java 8 - Optional类
  • 使用 Github Pages 和 Hexo 搭建博客
  • linux 移动硬盘加载失败
  • 得帆AI aPaaS(AI低代码)1.0产品特性(5)-智能搭建(二)
  • 吱吱企业即时通讯不止通讯,还是数字化协作的安全与效率标杆
  • callout样式
  • 得帆AI aPaaS(AI低代码)1.0产品特性(4)-智能搭建(一)
  • 日记11