正所谓:网络姻缘一线牵,Json与XML来相伴。
1-1为什么要学会数据解析
1-2服务器返回的数据
2-1什么是Json
2-2Json解析
2-3案例1
2-4案例2
3-1什么是XML
3-2XML解析
3-3案例
使用Unity做游戏开发,联网功能是必不可少的,所以跟服务器打交道也就必不可少。在其他语言开发环境中也需要与服务器打交道,而所使用的数据格式都是一样的。所以我们可以不会搭建服务器的业务逻辑,但是必须掌握服务器返回给客户端数据的解析,
#####1-2.服务器返回的数据格式
目前最常见的就是Json与XML格式
它是一种轻量级的数据格式,一般用于数据交互
服务器返回给客户端的数据,一般都是JSON格式(文件下载除外 http://www.jianshu.com/p/ef122b64d34f)
JSON的格式很像C#中字典和数组,类对象
标准的Json:key必须用双引号。
{“name” : "Jack", "age" : "10"}
{"names" :["Jack","rose","jock"] }
先来看一段服务器返回的数据格式:
{
"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"
}
]
}
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”};
[]包裹,表示一个对象属性下面的多个元素内容
{“Persones” :[{“name” : “LiLei”, “age” : “20”},{“name” : “HanMeiMei”, “age” : “21”}]}
使用LitJson进行解析
[
{"id" : 10,"Name" : "Leichao","age":28},
{"id" : 20,"Name" : "LinfenPiPi","age":20},
{"id" : 30,"Name" : "SunYin","age":27}
]
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);
}
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
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
全称是Extensible Markup Language,译作“可扩展标记语言”
跟JSON一样,也是常用的一种用于交互的数据格式
一般也叫XML文档(XML Document)
一个常见的XML文档一般由以下部分组成
在XML文档的最前面,必须编写一个文档声明,用来声明XML文档的类型
最简单的声明
用encoding属性说明文档的字符编码
一个元素包括了开始标签和结束标签
拥有内容的元素:小黄人
没有内容的元素:
没有内容的元素简写:
一个元素可以嵌套若干个子元素(不能出现交叉嵌套)
全家福 第01张
80
注意:
XML中的所有空格和换行,都会当做具体内容处理
下面两个元素的内容是不一样的
第1个
第2个
一个元素可以拥有多个属性
video元素拥有name和length两个属性
属性值必须用 双引号"" 或者 单引号'' 括住
实际上,属性表示的信息也可以用子元素来表示,比如
全家福 第一张
30
XML的解析方式有2种
DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件
XmlDocument
- CreatElement() : //创建一个元素
- AppendChild(): //往节点下追加根节点
- Save() //保存XML文件
XmlDeclaration
- CreatXMLDeclaration() // 创建XML的声明节点
XmlElement
-GetElementsByTagName() // 根据节点名称获取下面的该节点名称的子节点元素
-setAttribute() // 设置元素的属性
-GetAttribute() // 获得元素的属性
- InnetText
-InnerXML
XmlNode(XmlElement的基类)
XmlNodeList
1
jim
100
...
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 Persones = new List();
// 接着遍历所有的节点,拿到每一个节点,保存到我们的数组与集合中
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!