您的位置:首页 > 移动开发 > Unity3D

Unity常见的解析数据方式XML,JSON,ProtocolBuf篇(三)Json

2017-01-01 22:30 519 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity json 数据 3d
相关文章推荐