当前位置: 首页 > 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.gsyq.cn/news/25250.html

相关文章:

  • 软件测试流程-入门
  • 国产0.38mm超小22pF/50V/C0G电容HLCC2250G,77GHz实测S参数公开,可pin-to-pin替换
  • 昇腾npu架构运行deepseek
  • 进化计算入门
  • 02-01串口理论知识
  • 赋能安全管控:NVR接入录像回放平台EasyCVR加油站监控应用场景与实际功能
  • .Net 自定义定时器
  • CF2110E Melody
  • Python自学笔记
  • sqlalchemy 密码@ 处理, 以及ssl连接处理
  • 2025 年破碎机厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析圆锥/辊式/对辊/煤矸石/砂石破碎机厂家推荐
  • 拆解3D Gaussian Splatting:原理框架、实战 demo 与自驾仿真落地探索!
  • Android脱壳
  • Gitee:本土化技术平台如何重塑中国开发者生态
  • 得帆AI aPaaS(AI低代码)1.0产品特性(5)-智能搭建(二)
  • 得帆AI aPaaS(AI低代码)1.0产品特性(4)-智能搭建(一)
  • 腾讯企业邮箱管理
  • element 表单校验失败定位到指定元素
  • 2025年湖北武汉实验室设计哪家口碑好/哪家信誉好/哪家售后好?
  • C# Avalonia 16- Animation- BombDropper
  • C# 使用NPOI生成Word文件
  • Python3 statistics 模块
  • 随机生成动态头像
  • 2025年AI搜索优化品牌推荐排行榜前十强深度解析
  • 2025年AI搜索优化品牌推荐排行榜:技术深度解析与选择指南
  • win10 开启大小核心调度--异类策略0~4介绍
  • Windows 已保护你的电脑:Microsoft Defender SmartScreen 阻止了无法识别的应用启动。运行此应用可能会导致你的电脑存在风险。
  • 恒生电子面经准备 - 详解
  • 想学习的数学
  • 详细介绍:Streamlit:CSS——从基础到实战美化应用