服务器数据解析

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文档

图片1.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,947评论 25 707
  • 今日冬至 至,已完全到达极点 事物的鼎盛,便是它消亡的开始 于是,在最寒冷的季节,意味着春天已近 冬日一阳生,天时...
    心笛阅读 404评论 0 0
  • 阳春三月,我们寻着春鲜来到了田间。 很容易看到人们在抽蒜薹(当地也叫蒜芯,即蒜苗的花轴) 和同样时令的嫩蚕豆米炒在...
    白语金言阅读 385评论 2 3
  • 没颜值没身材,但是他足够努力。 在一般人看来,他是一个颜值不能再低,靠扮丑和说段子走红的人。 很多花瓶都会抱怨,我...
    cassie_k阅读 468评论 1 2