JSON
JSON是一种轻量级的数据格式,一般用于数据交互
服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)
{“name” : "Jack", "age" : "10"}
{"names" :["Jack","rose","jock"] }
标准JSON格式的注意点:key必须用双引号
要想从JSON中挖掘出具体数据,得对JSON进行解析
切记记事本一定要保存为UF-8的格式
使用LitJson解析Json
JsonData data = JsonMapper.ToObject(Resources.Load<TextAsset>("Items").text);
foreach (JsonData temp in data)
{
int idValue = int.Parse(temp["id"].ToString());//int解析
string nameValue = temp["name"].ToString();//字符串解析
Item.ItemType type = (Item.ItemType)System.Enum.Parse(typeof(Item.ItemType),temp["type"].ToString());//枚举解析
}
首先我们先将LitJson导入我们U3d中然后在我们开始摄像机下创建一个脚本并且将其命名为Jsontext,然后我们打开脚本在这个项目下再创建一个文本文件并默认命名添加
Paste_Image.png
然后我们在文本文件中写入我们的存储的数据,格式如下,
Paste_Image.png 写入数据后我们保存再在这个项目下我们再创建一个类并将其命名为Person,然后我们在这类下写入以下代码
public class Person
{
public string name;
public int age;
public int id;
public Person()
{
}
public Person(string _name, int _age,int _id)
{
name = _name;
age = _age;
id = _id;
}
}
写入后我们保存再进入我们的Jsontext中开始我们的解析
using Assets;
using LitJson;
using System.IO;
public class Jsontext : MonoBehaviour {
public TextAsset tsss;
public Person p1;
public Person p2;
public Person p3;
void Start ()
{
Person[] p = new Person[]
{
p1 = new Person(),
p2 = new Person(),
p3 = new Person()
};
string path = "Assets/Resources/TextFile1.txt";
string textOne = File.ReadAllText(path);
JsonData data = JsonMapper.ToObject(File.ReadAllText(path));
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);
}
}
随后我们再U3D中的Project下创建文件夹并且命名为Resources,并将我们的文本储藏的数据TextFile1拖入该文件中,我们再看打印结果,可以看到储藏的数据被我们解析出来了
Paste_Image.png
也可以这样
void ReadTest()
{
string str = @"
{
""Name"" : ""Song+"",
""Age"" : 26,
""Birthday"" : ""1986-11-21"",
""Thumbnail"":[
{
""Url"": ""http:www.baidu.com"",
""Height"": 256,
""Width"": ""200""
},
{
""Url"": ""http://baidu.com"",
""Height"": 1024,
""Width"": ""500""
}
]
}";
//这里是解析,包括整形与字符串
JsonData jd = JsonMapper.ToObject(str);
Debug.Log("name = " + (string)jd["Name"]);
Debug.Log("Age = " + (int)jd["Age"]);
Debug.Log("Birthday = " + (string)jd["Birthday"]);
JsonData jdItems = jd["Thumbnail"];
for (int i = 0; i < jdItems.Count; i++)
{
Debug.Log("URL = " + jdItems[i]["Url"]);
Debug.Log("Height = " + (int)jdItems[i]["Height"]);
Debug.Log("Width = " + jdItems[i]["Width"]);
}
}
XML
全称是Extensible Markup Language,译作“可扩展标记语言”
跟JSON一样,也是常用的一种用于交互的数据格式
一个常见的XML文档一般由以下部分组成
文档声明
元素(Element)
属性(Attribute)
一般也叫XML文档(XML Document)
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!
网友评论