Json的动态解析
最近在项目中需要动态解析json,但解析json的方式有很多,如何合理的解析就是我们需要考虑的问题?比如Newtonsoft.Json.Linq下提供的JToken、JObject等,Newtonsoft.Json下提供的JsonConvert。
| JObject | 用于操作json对象 |
| JArray | 用于操作json数组 |
| JValue | 表示数组的值 |
| JProperty | 表示对象中的属性,以"key/value"的形式 |
| JToken | 用于存放Linq to Json查询后的结果 |
我们今天主要介绍不同解析方式适用的场景以及用法:
1、JObject

JObject用于操作对象,若用它来解析其它类型的json会报Newtonsoft.Json.JsonReaderException。
JObject jObject = new JObject();
jObject.Add(new JProperty("name", "caixukun"));
jObject.Add(new JProperty("skill", new JObject(new JProperty("id", ), new JProperty("name", "撩妹"))));
Console.WriteLine(jObject.ToString());
结果:
{
"name": "caixukun",
"skill": {
"id": 1,
"name": "撩妹"
}
}
2、JArray

JArray用于操作数组,若用它来解析其它类型的json会报Newtonsoft.Json.JsonReaderException。
JArray arr = new JArray();
arr.Add(new JValue());
arr.Add(new JValue());
arr.Add(new JValue());
Console.WriteLine(arr.ToString());
结果:
[
1,
2,
3
]
3、JToken
string json = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";
// 获取员工名称
JObject jObject = JObject.Parse(json);
var name = jObject.Value<string>("Name");
Console.WriteLine(name);
// 获取员工年龄
JToken jToken = jObject.SelectToken("Age");
Console.WriteLine(jToken.ToString());
// 获取同事信息
JToken jToken1 = jObject["Colleagues"];
Console.WriteLine(jToken1.ToString());
Console.WriteLine("=============================");
// 获取员工同事的所有姓名
var names = from staff in jToken1.Children()
select (string)staff["Name"];
// var names = jObject.SelectToken("Colleagues").Select(p => p["Name"]).ToList();
foreach (var item in names)
{
Console.WriteLine(item);
}
Console.WriteLine("=============================");
// 修改Jack的年龄
jObject["Age"] = ;
Console.WriteLine(jObject.ToString());
// 修改同事Tome的年龄
jToken1[]["Age"] = ;
Console.WriteLine(jObject.ToString());
Console.WriteLine("=============================");
// Abel离职了
jObject["Colleagues"][].Remove();
Console.WriteLine(jObject.ToString());
// 移除Jack的同事
jObject.Remove("Colleagues");
Console.WriteLine(jObject.ToString());
Console.WriteLine("=============================");
// Jack缺少部门信息
jObject["Age"].Parent.AddAfterSelf(new JProperty("Department", "总裁办"));
// 来了一个新员工Jerry
JObject linda = new JObject(new JProperty("Name", "Linda"), new JProperty("Age", ""));
jObject.Add(new JProperty("Colleagues", new JArray() { linda }));
Console.WriteLine(jObject.ToString());
参考:https://www.cnblogs.com/klsw/p/5904573.html
Json的动态解析的更多相关文章
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- 在C#中,Newtonsoft.Json + dynamic动态解析jsonString,jsonString转实体
记录一下 引用 using Newtonsoft.Json; using Newtonsoft.Json.Linq; var jsonString = "{\"ApiResourc ...
- C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据
一.说明 1.Newtonsoft.Json 中的Linq To Json中提供了方便的json数据查询.修改等操作. 例如:JObject,JArray 2.在JObject.FromObject( ...
- jsoncpp动态解析节点类型
在互联网无处不在的今天,JSON作为轻量级数据存储格式,被广泛应用到互联网数据传输中.众所周知,JSON由键/值对.对象.数组组成,其中键/值对的值包括以下几种类型: enum ValueType { ...
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...
- 动态Json字符串的解析
动态Json字符串的解析 对于传统的Json字符串,比如有规定属性的对象,通常都会采用反序列化的方式就可以了,例如下面的方式: DataContractJsonSerializer ser = new ...
- JS中将JSON的字符串解析成JSON数据格式《转》
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...
- iOS开发网络篇-JSON文件的解析
一.什么是JSON数据 1.JSON的简单介绍 JSON:是一种轻量级的传输数据的格式,用于数据的交互 JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用 ...
- 初探原生js根据json数据动态创建table
初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...
随机推荐
- android ——网络编程
一.WebView 这个View就是一个浏览器,用于展示网页的. 布局文件: <LinearLayout xmlns:android="http://schemas.android.c ...
- html学习笔记整理
网页 1.网页的组成部分 网页是由文字,图片,视频,音频,输入框,按钮这些元素(也就是html标签)组成. 2.浏览网页常用的五大主流浏览器 谷歌,IE,火狐,欧朋,safari.浏览器的内核(渲染引 ...
- 第一次接触Linux
一:文件目录操作命令 (一)创建文件 vim 文件名 按i进入插入模式 写完文件后,先按Esc, 再输入 :w ...
- 基于注解的SpringAOP源码解析(三)
注意,读完本篇文章需要很长很长时间 在之前的2篇文章:AOP源码分析(一)AOP源码分析(二) 中,我们搭建了SpringAOP源码分析的环境,介绍了@EnableAspectJAutoProxy注解 ...
- 一文了解:Redis主从复制
Redis主从复制 主从复制 主从复制,将一台Redis服务器的数据,复制到其他Redis服务器.前者称为主(master)节点,后者称为从(slave)节点 . 在默认的情况下,Redis都是主节点 ...
- Linux下各目录及其作用
目录及其作用 /:根目录,一般根目录下只存放目录,不要存放件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中 /bin: /usr/bin: 可执行二进制文件的目录,如 ...
- Python数据类型详解——列表
Python数据类型详解--列表 在"Python之基本数据类型概览"一节中,大概介绍了列表的基本用法,本节我们详细学一下列表. 如何定义列表:在[]内以英文里输入法的逗号,,按照 ...
- Struts2:request & response
整理自网上: 1. 获取Request和Response的方法 1.1. ServletActionContext的静态方法 HttpServletRequest request = ...
- visual studio code 应用到.net core 实战
鉴于visual studio 2019 近期动不动卡顿与切分支后F12等功能失效的问题,开始考虑用visual studio code 代替他,对,你没有看错,就是代替visual studio 这 ...
- [python]python字典
1.简介 字典是python中的映射数据类型,由‘键-值’(key-value)对构成. 键:几乎所有类型的python对象都可以用作键,不过一般还是以数字或者字符串最为常用. 值:可以是任意类型的p ...