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();


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值