正所谓:网络姻缘一线牵,Json与XML来相伴。

  • 欢迎关注公众号:雷潮课堂

服务器数据解析

一、服务器返回的数据格式

1-1为什么要学会数据解析
1-2服务器返回的数据

二、Json

2-1什么是Json
2-2Json解析
2-3案例1
2-4案例2

三、XML

3-1什么是XML
3-2XML解析
3-3案例

四、XML与Json区别

一、数据解析

1-1.为什么要学会数据解析

使用Unity做游戏开发,联网功能是必不可少的,所以跟服务器打交道也就必不可少。在其他语言开发环境中也需要与服务器打交道,而所使用的数据格式都是一样的。所以我们可以不会搭建服务器的业务逻辑,但是必须掌握服务器返回给客户端数据的解析,
#####1-2.服务器返回的数据格式
目前最常见的就是Json与XML格式

二、Json

2-1 什么是Json?

它是一种轻量级的数据格式,一般用于数据交互
服务器返回给客户端的数据,一般都是JSON格式(文件下载除外 http://www.jianshu.com/p/ef122b64d34f)
JSON的格式很像C#中字典和数组,类对象
标准的Json:key必须用双引号。

{“name” : "Jack", "age" : "10"}{"names" :["Jack","rose","jock"] }
2-2 Json解析

先来看一段服务器返回的数据格式:

{"name" : "jack","age"  : 20,"height" : 1.99,"school" : {“name” : “雷潮",“address” : “深圳南山区"},"photos" : [{"icon" : "beauty.png","time" : "2016-01-01"},{"icon" : "nice.png","time" : "2016-02-07"},{"icon" : "good.png","time" : "2016-05-06"}]
}

  • Json基本结构一:
    用{}包裹,用名称/值来表示对象中的一个属性.
public  class Person
{public string name;public int age;public Person(){}public Person(string _name, int _age){name = _name;age = _age;}
}
Person  p = new Person(“lilei”,20);

用Json表示:

{“name” : “lilei”, “age” : “20”};
  • Json基本结构二:
[]包裹,表示一个对象属性下面的多个元素内容
{“Persones” :[{“name” : “LiLei”, “age” : “20”},{“name” : “HanMeiMei”, “age” : “21”}]}
2-3.案例1:

使用LitJson进行解析

[
{"id" : 10,"Name" : "Leichao","age":28},
{"id" : 20,"Name" : "LinfenPiPi","age":20},
{"id" : 30,"Name" : "SunYin","age":27}
]
  • 解析1:解析出我们可以识别的对象
 string path = "Assets/Resources/TextFile.txt";string textOne = File.ReadAllText(path);JsonData data1 = JsonMapper.ToObject(textOne);for (int i = 0; i < data1.Count; i++){JsonData nameValue = data1[i]["Name"];Debug.Log(nameValue);NameText.text = nameValue.ToString();JsonData IDValue = data1[i]["id"];IDText.text = IDValue.ToString();JsonData AgeValue = data1[i]["age"];AgeText.text = AgeValue.ToString();Debug.Log("名字是:" + NameText + "ID:" + IDText);}
  • 解析2:出来并给对象赋值
      Person[] p = new Person[] {p1 = new Person(),p2 = new Person(),p3 = new Person()};string path = "Assets/Resources/TextFile.txt";string textOne = File.ReadAllText(path);     JsonData data = JsonMapper.ToObject(File.ReadAllText(path));Debug.Log(p.Length);for (int i = 0; i <data.Count; i++){JsonData idValue = data[i]["id"];p[i].id = int.Parse(idValue.ToString());JsonData AgeValue = data[i]["age"];p[i].age = int.Parse(AgeValue.ToString());JsonData nameValue = data[i]["Name"];p[i].name = nameValue.ToString();Debug.Log("name :" + nameValue.ToString());}Debug.Log("------------" +p[0].age + "++++++" + p[1].name);}
2-4.案例2:
 string str = @"{""Name""     : ""SunYin"",""Age""      : 27,""Birthday"" : ""1990-09-09"",""Urls"":[{""Url"":    ""http://www.jianshu.com/p/ef122b64d34f"",},{""Url"":    ""http://www.jianshu.com/p/a5c0844a0590"",}]}";

解析方式:

        JsonData data = JsonMapper.ToObject(str);Debug.Log("name = " + (string)jd["Name"]);Debug.Log("Age = " + (int)jd["Age"]);Debug.Log("Birthday = " + (string)jd["Birthday"]);JsonData dataUrls = data["Urls"];for (int i = 0; i <dataUrls.Count; i++){Debug.Log("URL = " + dataUrls[i]["Url"]);}}

三、XML

3-1、什么XML?

全称是Extensible Markup Language,译作“可扩展标记语言”
跟JSON一样,也是常用的一种用于交互的数据格式
一般也叫XML文档(XML Document)

<photos><photo name="全家福 第01张" height="80" /><photo name="全家福 第02张" hright="90" /><photo name="全家福 第03张" hright="60" />
</photos>

一个常见的XML文档一般由以下部分组成

  • 1-文档声明
在XML文档的最前面,必须编写一个文档声明,用来声明XML文档的类型
最简单的声明
<?xml version="1.0" ?>
用encoding属性说明文档的字符编码
<?xml version="1.0" encoding="UTF-8" ?>
  • 2-元素(Element)
一个元素包括了开始标签和结束标签
拥有内容的元素:<photo>小黄人</photo>
没有内容的元素:<photo></photo>
没有内容的元素简写:<photo/> 一个元素可以嵌套若干个子元素(不能出现交叉嵌套)
<photos><photos><name>全家福 第01张</name><height>80</height></photos><video> </video>
</photos>注意:
XML中的所有空格和换行,都会当做具体内容处理
下面两个元素的内容是不一样的
第1个
<video>小黄人</video>第2个
<video>小黄人
</video>
  • 3-属性(Attribute)
一个元素可以拥有多个属性
<photo name="全家福 第一张" height="80" />
video元素拥有name和length两个属性
属性值必须用 双引号"" 或者 单引号'' 括住实际上,属性表示的信息也可以用子元素来表示,比如
<photo><name>全家福 第一张</name><height>30</height>
</photo>
3-2、XML解析

XML的解析方式有2种
DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件

XmlDocument
- CreatElement() : //创建一个元素
- AppendChild():  //往节点下追加根节点
- Save() //保存XML文件
XmlDeclaration
- CreatXMLDeclaration() // 创建XML的声明节点
XmlElement
-GetElementsByTagName() // 根据节点名称获取下面的该节点名称的子节点元素
-setAttribute() // 设置元素的属性
-GetAttribute() // 获得元素的属性
- InnetText
-InnerXML
XmlNode(XmlElement的基类)
XmlNodeList
XML数据
<Persones><Person><id> 1 </id><name lang = “En”> jim</name><damage> 100</damage></Person>...
</Persones>

C#解析

calss Person
{public int ID {get;set;}public string Name{get;set;}public string Lang{get;set;}public int Damage{get; set;}public override string ToString() {rerturn string.Format(“id:{0},Name:{1},Lang:{2},Damage:{3}”,ID,Name,Lang,Damage);}
}

引用System.Xml空间
// 专门用来解析XML文档的
XmlDocument doc = new XmlDocument()
// 此文件必须在程序集中
doc.load(“需要解析的文件名称”);// 专门用来解析XML文档的XmlDocument doc = new XmlDocument();// 此文件必须在程序集中// doc.Load("XML信息");string path = "Assets/Resources/XML信息.xml";doc.LoadXml(File.ReadAllText(path));       // 先得到根节点,第一个节点XmlNode rootNode = doc.FirstChild;// 获取根节点的所有节点XmlNodeList nodeList = rootNode.ChildNodes;// 得到所有的子节点,我们通过数组或者列表保存List<PersonXML> Persones = new List<PersonXML>();// 接着遍历所有的节点,拿到每一个节点,保存到我们的数组与集合中foreach (XmlNode PersonNode in nodeList) {XmlNodeList propertyPerson = PersonNode.ChildNodes; // 获取PersonNode下面的所有节点PersonXML p = new PersonXML(); // Person里面有XML文档中的每一个属性foreach (XmlNode property in propertyPerson){if (property.Name == "id"){p.ID = int.Parse(property.InnerText); // 获取内部文本}else if (property.Name == "name"){p.Name = property.InnerText;p.Lang = property.Attributes[0].Value;}else if (property.Name == "damage"){p.Damage = int.Parse(property.InnerText);}}Debug.Log(p);}}

关于创建XML文档

四、两者的比较

同一份数据,既可以用JSON来表示,也可以用XML来表示
JSON的体积小于XML,所以服务器返回给移动端的数据格式以JSON居多,而对于客户端两者都ok!


  • 欢迎购买本课程:

腾讯课堂


网易云课堂

Unity网络(三)-服务器数据解析相关推荐

  1. Swift 掌控Moya的网络请求、数据解析与缓存

    Moya 在Swift开发中起着重要的网络交互作用,但是还有不如之处,比如网络不可用时,返回的 Response 为 nil,这时还得去解析相应的 Error Codable 可以帮助我们快速的解析数 ...

  2. 获取并显示服务器数据,客户端获取服务器数据解析

    客户端获取服务器数据解析 内容精选 换一换 VR云渲游平台提供了设备的实时监控功能,您可以通过监控大屏,查看指定设备在云上运行时的实时监控数据.当设备处于"运行中"状态时,才可以查 ...

  3. python爬虫学习笔记-网络爬虫的三种数据解析方式

    爬虫的分类 1.通用爬虫:通用爬虫是搜索引擎(Baidu.Google.Yahoo等)"抓取系统"的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份 ...

  4. python爬虫中三种数据解析方式

    一.正解解析 常用正则表达式: 单字符: .: 除换行以外所有字符 []:[aoe] [a-w]匹配集合中任意一个字符 \d:数字 [0-9] \D: 非数字 \w :数字.字母.下划线.中文 \W ...

  5. 小程序快速入门到项目开发 7 (网络通讯和数据解析)

    你好,[程序职场]专注于:Spring Boot ,微服务 和 前端APP开发,闲暇之余一起聊聊职场规划,个人成长,还能带你一起探索 副业赚钱渠道,在提升技术的同时我们一起交流 敏捷流程 提高工作效率 ...

  6. Java 使用Socket 实现基于DTU的TCP服务器 + 数据解析 + 心跳检测

    在物联网时代,DTU的运用非常广泛 :环境监测中通过DTU将传感器的数据远程传输至云服务器也是比较常见的用法.下面我来分享一下我的项目经验 1.物理连接拓扑 2.服务器后台流程 3.代码 设备TCP服 ...

  7. JSON三种数据解析方法

    JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,那么想要学好JSON解析就要了解什么是JSON数据,怎么快速解析它从而提升开发效率. 1 什么是JSON数据? 先 ...

  8. Python网络爬虫之数据解析篇

    对于爬虫中的数据解析,简单理解就是在通用爬虫获取到的响应数据中,进一步提取出我们需要的某些特定数据,例如一段文字,一张图片. 聚焦爬虫:爬取页面中指定的页面内容. --编码流程 1.指定url 2.发 ...

  9. 大数据智慧数字电商第三课 数据解析和etl落地dwd

    实时数仓第3天讲义 课程目标 能够编写Flink程序解析Kafka中的ProtoBuf 能够实现维度数据全量装载.增量更新 能够使用Logparsing框架解析Nginx点击流日志 能够实现点击流消息 ...

最新文章

  1. WebLogic Server的单点登陆功能--转载
  2. word文档插入行号
  3. ORACLE REDO 日志调整
  4. 东芝正式退出笔记本电脑业务!
  5. 计算机网络小黑指北-单选题自测
  6. 5G 技术特点与应用
  7. java满天星星代码_纯Java代码实现流星划过天空
  8. 疯狂的上网本意义何在?
  9. 骨传导耳机是什么意思?骨传导耳机工作原理是什么
  10. 智能音箱 天猫精灵 X1 + Broadlink 打造智能家居摇控
  11. Android自带人脸识别
  12. 北京工业大学计算机考研录取名单,2018年北京工业大学考研拟录取名单公示——信息学部...
  13. 浔阳江头夜送客,枫叶荻花秋瑟瑟——python标准输入、标准输出和注释
  14. 争用期51.2us和最小帧长512比特算法
  15. 最新微信hook二次开发C#Demo之获取消息代码
  16. 各linux桌面性能比较,七大顶级桌面比较!Linux平台自由选择
  17. 职称计算机windows 7,2017高会《职称计算机》模块精讲:Windows7的启动和退出
  18. C++ signed 与 unsigned
  19. python+pyhyper实现识别图片中的车牌号
  20. 推荐几本游戏策划的书

热门文章

  1. 安卓手机投屏很简单,每个安卓手机都可以
  2. outlook qr码在哪里_QR扫描仪-QR扫描仪App下载-
  3. Mysql查询时强制指定索引
  4. 直流电源滤波电容选择
  5. 曹国伟的二次创业,为什么如今成了互联网红灯区?
  6. E. Easy Assembly
  7. python资本市场财务数据分析统计服_python股票财务数据分析统计服|蓝田制作项目并购估值...
  8. Android消息提示框
  9. uni-app高德地图配置
  10. 差分S参数 转 单端S参数 的推导