Unity常見的解析數據方式XML,JSON,ProtocolBuf篇(三)Json

Unity常見的解析數據方式XML,JSON,ProtocolBuf篇(三)Json

概述

Json是一種存儲和交換文本信息的語法,類似於XML。(注意這裏兩個概念,存儲文本信息,交換文本信息)Json和xml都是一種存儲信息的數據格式,但是Json比Xml要優秀一些,三種存儲和解析數據的數據格式優先級是Protobuf>Json>XML。我們學習使用Json,首先像學習XML文檔一樣從書寫格式開始學起,如果寫Json數據都不會寫,後面的更加不用說了,寫Json數據,需要注意的地方:

書寫規則:

數據在鍵值對中
數據由逗號分隔
花括號保存對象
方括號保存數組

示例:

[
{"id":2,"name":"kill1","damage":123},
{"id":3,"name":"kill2","damage":231},
{"id":"4","name":"kill3","damage":132}
]


接下來我們來寫這樣一個Json文本信息,來用代碼進行解析。

using LitJson; //注意Jsondll的引用

namespace Json_Pro
{
    class Program
    {

        private static List<Skill> mSkillList = new List<Skill>();
        static void Main(string[] args)
        {
            //1.添加litjson.dll
            //2.開始解析 skill.txt
            //使用JsonMapper進行文本數據解析,接收解析使用JsonData
            JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("Skill.txt"));

            foreach (JsonData item in jsonData) //一定要確定爲jsondata型 var下面不能轉換
            {
                Skill skill = new Skill();
                JsonData idValue = item["id"];
                JsonData nameValue = item["name"];
                JsonData damageValue = item["damage"];

                //int id=Int32.Parse(idValue.ToString());
                //string skillName = nameValue.ToString();
                //int damage=Int32.Parse(damageValue.ToString());


                skill.ID = Int32.Parse(idValue.ToString());
                skill.Name = nameValue.ToString();
                skill.Damage = Int32.Parse(damageValue.ToString());

                //3.測試數據
                //Console.WriteLine(id + skillName + damage);
                //4.創建json數據映射類用來存儲解析出來的技能信息
                mSkillList.Add(skill);
            }


            foreach (Skill itemSkill in mSkillList)
            {
                Console.WriteLine("id:"+ itemSkill.ID+" name:"+ itemSkill.Name+" damage:"+ itemSkill.Damage);
            }

            Console.ReadKey();
        }
    }
}

Json數據映射類

namespace Json_Pro
{
    class Skill
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Damage { get; set; }

    }
}

接下來使用Json泛型解析文本數據

①.解析成映射類Skill類型的數組:Skill[]

        static void Main(string[] args)
        {
            //1.添加litjson.dll
            //2.開始解析 skill.txt
            //使用JsonMapper進行文本數據解析,接收解析使用JsonData
            Skill[] skills = JsonMapper.ToObject<Skill[]>(File.ReadAllText("Skill.txt"));
            //這種方式要注意映射類和json值要對應 例如:Json :int value Map.cs: -->int value ,簡言之就是對象的鍵一定要和定義的類的字段名字一致
            foreach (var item in skills)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }


②.解析成映射類Skill類型的集合:List<Skill>

        static void Main(string[] args)
        {
            List<Skill>mSkillList=new List<Skill>();
            mSkillList = JsonMapper.ToObject<List<Skill>>(File.ReadAllText("Skill.txt"));
            foreach (var item in mSkillList)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }


我們接下來解析一個Json對象,前面的腳本記住還是需要的。

修改Json文本

{
	"name":"pc",
	"level":95,
	"age":18,

	"skillList":[
	{"id":2,"name":"kill1","damage":123},
	{"id":3,"name":"kill2","damage":231},
	{"id":4,"name":"kill3","damage":132}
	]
}

添加玩家類

    class Player
    {
        public string name { get; set; }
        public int level { get; set; }
        public int age { get; set; }

        public List<Skill> skillList { get; set; }

        public override string ToString()
        {
            return string.Format("name:{0},level:{1},age:{2},skillList{3}", name, level, age,skillList);
        }
    }


解析

    class Program
    {
        static void Main(string[] args)
        {
            Player skillInfo = JsonMapper.ToObject<Player>(File.ReadAllText("Skill.txt"));
            Console.WriteLine(skillInfo);
            foreach (var item in skillInfo.skillList)
            {
             Console.WriteLine(item);   
            }
            Console.ReadKey();
        }
    }

最後輸出



當然上面說的都是講文本解析出來,我們也可以將對象封裝成Json文本,調用

            //將對象變成Json數據
           string jsonData= JsonMapper.ToJson();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章