Json.Net 中Linq to JSON的操作
Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和修改部分的数据而非反序列化全部.
https://www.newtonsoft.com/json/help/html/LINQtoJSON.htm
在进行Linq to JSON之前,首先要了解一下用于操作Linq to JSON的类.
类名 | 说明 |
|
|
|
|
|
|
|
|
|
|
1、创建JObject and JArrary实例
创建JSON对象
- JObject staff = new JObject();
- staff.Add(new JProperty("Name", "Jack"));
- staff.Add());
- staff.Add(new JProperty("Department", "Personnel Department"));
- staff.Add(), new JProperty("Department", "Personnel Department"))));
- Console.WriteLine(staff.ToString());
创建JSON数组
- JArray arr = new JArray();
- arr.Add());
- arr.Add());
- arr.Add());
- Console.WriteLine(arr.ToString());
除此之外,还可以通过一下方式来获取JObject.JArray类似。
方法 | 说明 |
|
json含有JSON对象的字符串,返回为JObject对象 |
|
o为要转化的对象,返回一个JObject对象 |
|
reader包含着JSON对象的内容,返回一个JObject对象 |
如解析字符串:
- JArray a =JArray.Parse(jsonText);
- //或
- JObject jo = JObject.Parse(jsonText);
2、使用JsonConvert.DeserializeObject序列化JOSN片段
数组数据
- string jsonArrayText= "[{'a','al'.'b','b1'},{'a','a2'.'b','b2'}]";
- JArray ja =][]; string oa=o["a"].ToString();
对象格式
- siring jsonText= "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}";
- JObject jo =(JObject)JsonConvert.DeserializeObject(jsonArrayText);
- string zone =jo["beijing"]["zone"].ToString();
3、修改JObject and JArrary实例
- string json = @"{
- 'post':{
- 'Title':'修改JArray和JObject',
- 'Link':'http://write.blog.csdn.net',
- 'Description':'这是一个修改JArray和JObject的演示案例',
- 'Item':[]
- }
- }";
- JObject o = JObject.Parse(json);
- JObject post = (JObject)o["post"];
- post["Title"] = ((string)post["Title"]).ToUpper();
- post["Link"] = ((string)post["Link"]).ToUpper();
- post.Property("Description").Remove();
- post.Property("Link").AddAfterSelf(new JProperty("New", "新添加的属性"));
- JArray a = (JArray)post["Item"];
- a.Add("修改JArray");
- a.Add("修改JObject");
- 移除属性
- JObject jObj = JObject.Parse(json);
- jObj.Remove("Colleagues");//跟的是属性名称
- Console.WriteLine(jObj.ToString());
4、查询JObject and JArrary实例
- string json = @"{
- 'channel': {
- 'title': 'James Newton-King',
- 'link': 'http://james.newtonking.com',
- 'description': 'James Newton-King\'s blog.',
- 'item': [
- {
- 'title': 'Json.NET 1.3 + New license + Now on CodePlex',
- 'description': 'Announcing the release of Json.NET 1.3, the MIT license and the source on CodePlex',
- 'link': 'http://james.newtonking.com/projects/json-net.aspx',
- 'categories': [
- 'Json.NET',
- 'CodePlex'
- ]
- },
- {
- 'title': 'LINQ to JSON beta',
- 'description': 'Announcing LINQ to JSON',
- 'link': 'http://james.newtonking.com/projects/json-net.aspx',
- 'categories': [
- 'Json.NET',
- 'LINQ'
- ]
- }
- ]
- }
- }";
- JObject rss = JObject.Parse(json);
- string rssTitle = (string)rss["channel"]["title"];
- // James Newton-King
- ]["title"];
- // Json.NET 1.3 + New license + Now on CodePlex
- JArray categories = (JArray)rss[]["categories"];
- // ["Json.NET", "CodePlex"]
- IList<string> categoriesText = categories.Select(c => (string)c).ToList();
- // Json.NET
- // CodePlex
5、Querying with LINQ
- var postTitles =
- from p in rss["channel"]["item"]
- select (string)p["title"];
- foreach (var item in postTitles)
- {
- Console.WriteLine(item);
- }
- //LINQ to JSON beta
- //Json.NET 1.3 + New license + Now on CodePlex
- var categories =
- from c in rss["channel"]["item"].SelectMany(i => i["categories"]).Values<string>()
- group c by c
- into g
- orderby g.Count() descending
- select new { Category = g.Key, Count = g.Count() };
- foreach (var c in categories)
- {
- Console.WriteLine(c.Category + " - Count: " + c.Count);
- }
- //Json.NET - Count: 2
- //LINQ - Count: 1
- //CodePlex - Count: 1
6、使用函数SelectToken可以简化查询语句
①利用SelectToken来查询名称
- JObject jObj = JObject.Parse(json);
- JToken name = jObj.SelectToken("Name");
- Console.WriteLine(name.ToString());
结果:Jack
②利用SelectToken来查询所有同事的名字
- JObject jObj = JObject.Parse(json);
- var names = jObj.SelectToken("Colleagues").Select(p => p["Name"]).ToList();
- foreach (var name in names)
- Console.WriteLine(name.ToString());
结果:Tom Abel
③查询最后一名同事的年龄
- //将json转换为JObject
- JObject jObj = JObject.Parse(json);
- var age = jObj.SelectToken("Colleagues[1].Age");
- Console.WriteLine(age.ToString());
结果:29
7、如果Json中的Key是变化的但是结构不变,如何获取所要的内容?
例如:
- { ",
- "},
- {"},
- {"},
- {"},
- {"}
- ] }, }
其中的"2013-05-31 14:31"是变化的key,如何获取其中的"name","query","amount","delta"等信息呢?
通过Linq可以很简单地做到:
- var jObj = JObject.Parse(jsonString);
- var tends = from c in jObj.First.First.First.First.Children()
- select JsonConvert.DeserializeObject<Trend>(c.ToString());
- public class Trend
- {
- public string Name { get; set; }
- public string Query { get; set; }
- public string Amount { get; set; }
- public string Delta { get; set; }
- }
Json.Net 中Linq to JSON的操作的更多相关文章
- 在JS和.NET中使用JSON (以及使用Linq to JSON定制JSON数据)
转载原地址: http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html 阅读目录 JSON的两种结构 认识JSON字符串 在JS中如 ...
- Newtonsoft.json中 linq to json 和序列化哪个快?
Newtonsoft.json是最常用的json序列化组件,当然他不是最快的,但是是功能最全的.. using System; using System.Collections.Generic; us ...
- 关于json解析中 解析多重json对象
JSONObject rst = {"AIS-RST":"AIS-00000001","AIS-STATUS":"AIS-0000 ...
- 处理Json数据中的日期类型.如/Date(1415169703000)/格式
在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: v ...
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- python 历险记(四)— python 中常用的 json 操作
目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...
- Linq to json
Json.Net系列教程 4.Linq To JSON 一.Linq to JSON是用来干什么的? Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JS ...
- [Json.net]Linq to Json
引言 上篇学习了json.net的基本知识,这篇学习linq to json. 上篇文章:[Json.net]快速入门 Linq to Json Linq to Json是用来快速操作json对象的, ...
- Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json
原文:http://www.cnblogs.com/chsword/archive/2008/09/19/Newtonsoft_new_3_0.html http://www.cnblogs.com/ ...
随机推荐
- 记一次idea性能调优
因自研的自动化测试工具包含压测功能,在自己本地代码开发完毕后进行测试,对目标接口进行1000次访问,发现idea在执行结束后变的异常卡顿,怀疑是idea工具或者程序代码存在问题,遂进行排查. ---- ...
- Oracle 行列转换总结
行列转换包括以下六种情况:*列转行*行转列*多列转换成字符串*多行转换成字符串*字符串转换成多列*字符串转换成多行 下面分别进行举例介绍. 首先声明一点,有些例子需要如下10g及以后才有的知识:a.掌 ...
- Android如何避免输入法弹出时遮挡住按钮或输入框
在AndroidManifest.xml中为对应的activity添加android:windowSoftInputMode="adjustResize" 在AndroidMani ...
- [tools]转载汇总
1. 发送请求工具—Advanced REST Client Advanced REST Client是Chrome浏览器下的一个插件,通过它可以发送http.https.WebSocket请求.
- ASP.NET Core中使用自定义路由
上一篇文章<ASP.NET Core中使用默认MVC路由>提到了如何使用默认的MVC路由配置,通过这个配置,我们就可以把请求路由到Controller和Action,通常情况下我们使用默认 ...
- js验证护照号码是否合规
需求:最近要做实名验证的功能,但是验证我们要验证严谨一点,参考了网上关于验证护照号码的代码,总结一下. 代码: //验证护照号码 function checkPassport(code){ var t ...
- Query performance optimization of Vertica
Don't fetch any data that you don't need,or don't fetch any columns that you don't need. Because ret ...
- Node.js学习笔记(一) --- HTTP 模块、URL 模块、supervisor 工具
一.Node.js创建第一个应用 如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器, 来处理客户端的请求相应.不过对 Node.js 来说,概念完全 ...
- asp.net Core2.1连接到Mysql 数据库
1.首先,安装相关插件 在nuget下安装 1.Pomelo.EntityFrameworkCore.MySql 2.MySql.Data.EntityFrameworkCore 都要是2.1 < ...
- 二、IOC容器基本原理
IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需在代码中new相关的对象,应用程序由IOC容器进行组装. spring IOC ...