C# Newtonsoft.Json解析数组的小例子[转]
https://blog.csdn.net/Sayesan/article/details/79756738
上面提到的第四篇文章最后有个解析数组的例子,出现了
.First.First.First.First.Children();
我表示很晕,网上找的的例子大多数是关于JObject的,但是我很少看到JArray的例子,其实解析json数组的时候是需要用到JArray的,复杂数据实际上是JObject和JArray的组合:{}对应的是JObject,而[]对应的是JArray。举个json的例子吧(数据来源是腾讯地图api的示例,解析的是北京某处的地理信息和周边信息,略长啊)
- {
- "status": 0,
- "message": "query ok",
- "result": {
- "address": "北京市海淀区彩和坊路海淀西大街74号",
- "address_component": {
- "province": "北京市",
- "city": "北京市",
- "district": "海淀区",
- "street": "彩和坊路",
- "street_number": "海淀西大街74号"
- },
- "pois": [
- {
- "id": "3629720141162880123",
- "title": "中国技术交易大厦",
- "address": "北京市海淀区北四环西路66号",
- "category": "房产小区;商务楼宇",
- "location": {
- "lat": "39.984122",
- "lng": "116.307484"
- },
- "_distance": "3.6"
- },
- {
- "id": "2845372667492951071",
- "title": "中国技术交易大厦A座",
- "address": "北京市海淀区北四环西路66号",
- "category": "房产小区;商务楼宇",
- "location": {
- "lat": "39.984273",
- "lng": "116.307577"
- },
- "_distance": "15.2"
- },
- {
- "id": "12925244666643621769",
- "title": "中国技术交易大厦B座",
- "address": "北京市海淀区北四环西路66号",
- "category": "房产小区;商务楼宇",
- "location": {
- "lat": "39.983902",
- "lng": "116.307588"
- },
- "_distance": "29.3"
- },
- {
- "id": "7472400256925846331",
- "title": "中国化工博物馆",
- "address": "海淀区北四环西路62号中国化工集团大厦3楼(海淀桥西)",
- "category": "文化场馆;博物馆",
- "location": {
- "lat": "39.984582",
- "lng": "116.308877"
- },
- "_distance": "127.5"
- },
- {
- "id": "16243165360295251323",
- "title": "贝塔咖啡",
- "address": "北京市海淀区北四环西路66号中关村第三极大厦1层西北侧",
- "category": "娱乐休闲;咖啡厅",
- "location": {
- "lat": "39.984391",
- "lng": "116.307380"
- },
- "_distance": "28.0"
- },
- {
- "id": "7246616758286733108",
- "title": "基督教堂",
- "address": "北京市海淀区彩和坊路9号",
- "category": "旅游景点;教堂",
- "location": {
- "lat": "39.983146",
- "lng": "116.307507"
- },
- "_distance": "112.2"
- },
- {
- "id": "8627298709465036679",
- "title": "北京三木和商店",
- "address": "北京市海淀区北四环西路66号中关村文化商厦三层D-006-009单元",
- "category": "购物;综合商场",
- "location": {
- "lat": "39.984093",
- "lng": "116.307983"
- },
- "_distance": "42.6"
- },
- {
- "id": "12020256857742021617",
- "title": "图书城昊海楼",
- "address": "北京市海淀区海淀西街36号",
- "category": "房产小区;住宅区;住宅小区",
- "location": {
- "lat": "39.984400",
- "lng": "116.306794"
- },
- "_distance": "65.4"
- },
- {
- "id": "10394251724976454044",
- "title": "北京点点酷东东商贸中心海淀分部",
- "address": "北京市海淀区北四环西路66号中关村文化商厦2B001",
- "category": "购物;综合商场",
- "location": {
- "lat": "39.984093",
- "lng": "116.307983"
- },
- "_distance": "42.6"
- },
- {
- "id": "16427755502147943355",
- "title": "北京资源燕园宾馆",
- "address": "北京市海淀区颐和园路1号",
- "category": "酒店宾馆;星级酒店",
- "location": {
- "lat": "39.986712",
- "lng": "116.305822"
- },
- "_distance": "318.3"
- }
- ]
- }
- }
我使用HttpRequest获取了这部分信息
- HttpWebRequest request = (HttpWebRequest)result.AsyncState;
- HttpWebResponse response = (HttpWebResponse)(request.EndGetResponse(result));
- stream = response.GetResponseStream();
- StreamReader reader = new StreamReader(stream, false);
- string apiText = reader.ReadToEnd();
- JObject jsonObj = null;
- try
- {
- jsonObj = JObject.Parse(apiText);
- if (jsonObj.Count == 1 || (int)(jsonObj["status"]) != 0) this.isError = true;
- else
- {
- string provinceName = (string)jsonObj["result"]["address_component"]["province"];
- string cityName = this.cityName_s = (string)jsonObj["result"]["address_component"]["city"];
- string districtName = (string)jsonObj["result"]["address_component"]["district"];
- string street = (string)jsonObj["result"]["address_component"]["street"];
- /*下面是解析JArray的部分*/
- JArray jlist = JArray.Parse(jsonObj["result"]["pois"].ToString()); //将pois部分视为一个JObject,JArray解析这个JObject的字符串
- LocationItem locationitem = null; //存储附近的某个地点的信息
- locations = new List<LocationItem>(); //附近位置的列表
- for(int i = 0; i < jlist.Count ; ++i) //遍历JArray
- {
- locationitem = new LocationItem();
- JObject tempo = JObject.Parse(jlist[i].ToString());
- locationitem.id = tempo["id"].ToString();
- locationitem.title = tempo["title"].ToString();
- locationitem._distance = tempo["_distance"].ToString();
- locationitem.address = tempo["address"].ToString();
- locationitem.category = tempo["category"].ToString();
- locationitem.location.lat = tempo["location"]["lat"].ToString();
- locationitem.location.lng = tempo["location"]["lng"].ToString();
- locations.Add(locationitem);
- }
- }
- }
- catch (Exception)
- {
- isError = true;
- }
其中使用了两个类
- public class LngLat
- {
- public string lat { get; set; }
- public string lng { get; set; }
- }
- public class LocationItem
- {
- public string id{get;set;} //
- public string title { get; set; } //名称
- public string address { get; set; } //地址
- public string category { get; set; } //类型
- public LngLat location { get; set; } //经纬度
- public string _distance { get; set; } //距离(米)
- public LocationItem()
- {
- id = "0";
- title = "";
- address = "";
- _distance = "0";
- location = new LngLat { lng = "0", lat = "0" };
- category = "";
- }
- }
这样就完成了这个复杂json数据的解析。JSON数组访问还有用数组下标方式的,那个就需要数组至少要有足够的个数,如要取得上面那个json数据的
中国技术大厦A座 ,就是用 jsonObj["result"]["pois"][1]["title"].ToString()
,即访问了result下pois数组的第2个节点的title信息,但是要遍历所有的数据就明显不如JArray方便了
C# Newtonsoft.Json解析数组的小例子[转]的更多相关文章
- Newtonsoft.Json解析数组
以下是解析json数组: var jsonInfo=[{"name":"abc","id":"1","coun ...
- [Cannot deserialize JSON array into type] NewtonSoft.Json解析数据出错原因
今天用NewtonSoft.JSon解析一个天气数据,数据格式如: {"status":1,"detail":"\u6570\u636e\u83b7\ ...
- Newtonsoft.Json解析json字符串和写json字符串
写: StringWriter sw = new StringWriter(); JsonWriter writer = new JsonWriter(sw); //如果报错则使用JsonWriter ...
- C# Newtonsoft.Json解析json字符串处理(最清晰易懂的方法)
需求: 假设有如下json字符串: { ", "employees": [ { "firstName": "Bill", &quo ...
- c# 使用Newtonsoft.Json解析JSON数组
一.获取JSon中某个项的值 要解析格式: [{"VBELN":"10","POSNR":"10","RET_ ...
- C# Newtonsoft.Json解析json字符串处理 - JToken 用法
//*调用服务器API(获取可以处理的文件) //1.使用JSON通信协议(调用[待化验任务API]) String retData = null; { JToken json = JToken.Pa ...
- Newtonsoft.Json解析Json字符串案例:
/// <summary> /// 上行jsom格式日志记录 /// </summary> /// <param name="responseJson" ...
- spring的一个小例子(二)--解析前面的小例子
接上篇:http://www.cnblogs.com/xuejupo/p/5236448.html 首先应该明白,一个web项目,web.xml是入口. 然后下面来分析上篇博客中出现的web.xml: ...
- C# Newtonsoft.Json 解析多嵌套json 进行反序列化
[ { ", "time": "2016-09-09 12:23:33", ", "freeShipping": tru ...
随机推荐
- Xamarin iOS教程之添加和定制视图
Xamarin iOS教程之添加和定制视图 Xamarin iOS用户界面——视图 在iPhone或者iPad中,用户看到的摸到的都是视图.视图是用户界面的重要组成元素.例如,想要让用户实现文本输入时 ...
- bzoj1205: [HNOI2005]星际贸易
题目链接 bzoj1205: [HNOI2005]星际贸易 题解 辣鸡题面,毁我青春 辣鸡题面,毁我青 辣鸡题面,毁我 辣鸡题面,毁 第一问,背包dp 第二问 问题转化为在一个序列上经过好多点走到终点 ...
- 【HDU5909】Tree Cutting(FWT)
[HDU5909]Tree Cutting(FWT) 题面 vjudge 题目大意: 给你一棵\(n\)个节点的树,每个节点都有一个小于\(m\)的权值 定义一棵子树的权值为所有节点的异或和,问权值为 ...
- [USACO07JAN]Balanced Lineup
OJ题号:洛谷2880 思路1: 线段树维护区间最大最小值. #include<cstdio> #include<cctype> #include<utility> ...
- Upsync:微博开源基于Nginx容器动态流量管理方案
Upsync:微博开源基于Nginx容器动态流量管理方案 https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=404151075& ...
- WCF中的REST是什么
基于SOAP消息格式的WCF之所以强大原因之一是因为SOAP消息头的高度扩展性.相应的WS-*协议很多都体现在消息头封装的信息上,包括诸如寻址,需要调用方法名,维护Session的信息等等…… SOA ...
- 基于设备树的TQ2440触摸屏驱动移植
平台 开发板:tq2440 内核:Linux-4.9 u-boot:u-boot-2015.04 概述 之前移植了LCD驱动,下面继续移植触摸屏驱动,然后将tslib也移植上去. 正文 一.移植触 ...
- Spring Boot开发之明月千城(一)
原文地址:http://qindongliang.iteye.com/blog/2205633 最近数据分析的项目也即将告一段落了,中间也积累了很多知识,特此记录一下.其中用的最爽的Web组合开发就是 ...
- C#编程(五十四)----------Lookup类和有序字典
原文链接: http://blog.csdn.net/shanyongxu/article/details/47071607 Lookup类 Dictionary<Tkey,TValue> ...
- Ubuntu64位下使用eclipse闪退的解决
解决办法: 删除文件 [workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi