JSON数据现在是我们开发中用的最多的,很多数据都是通过JSON方式进行传输,json解析就是提升开发效率,可是json文件怎么解析?接下来,我们就来给大家讲解一下这方面的内容。
JSON文件的根可以是数组,也可以是对象。接下来就是基于这两种情况进行基本的JSON文件解析。
首先看以数组为根的JSON文件解析:
创建一个JSON文本文件json.txt如下:
[ { "id": 1 , "name": "天下无双" , "damage": "123" }, { "id": 2 , "name": "雌雄难辨" , "damage": "182" }, { "id": 3 , "name": "暗流涌动" , "damage": "89" } ]
接下来是JSON文件解析的所得属性所对应的承接的对象的数据结构:
class Skill { private int id { get; set; } private string name { get; set; } private int damage { get; set; } public Skill(int id, string name, int damage) { this.id = id; this.name = name; this.damage = damage; } public override string ToString() { string s = ""; s += id; s += name; s += damage; return s; } }
下面是是解析JSON文件的主方法:
class Program { static void Main(string[] args) { # region Listlist = new List(); //将JSON文件解析成对象形式存储到jsonData对象数组中 JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json.txt")); foreach(JsonData temp in jsonData) { Skill skill = null; JsonData idValue = temp["id"]; JsonData nameValue = temp["name"]; JsonData damageValue = temp["damage"]; int id = int.Parse(idValue.ToString()); string name = nameValue.ToString(); int damage = int.Parse(damageValue.ToString()); skill = new Skill(id, name, damage); list.Add(skill); } foreach(Skill temp in list) { Console.WriteLine(temp); } Console.Read();# endregion } }
接着来看以对象为根其中嵌套一个对象数组的JSON文件的解析过程:
创建一个player.txt文件:
{ "name": "feiyue" , "level": 99 , "age": 18 , "skillList": [ { "id": 1 , "name": "天下无双" , "damage": "123" }, { "id": 2 , "name": "雌雄难辨" , "damage": "182" }, { "id": 3 , "name": "暗流涌动" , "damage": "89" } ] }
下面是承接JSON文件中属性的对象的数据结构:
class Player { private string name; private int level; private int age; private ListskillList; public Player(string name, int level, int age, ListskillList) //对列表的初始化 就用实例赋值的方法 { //所以就要求在解析完json后将列表的对象信息先做成一个对象列表,再传给构造函数 this.name = name; this.level = level; this.age = age; this.skillList = skillList; } public override string ToString() { string s = ""; s += name; s += level; s += age; foreach(Skill temp in skillList) { s += temp.ToString(); //因为我已经重写了skill中的tostring()方法,所以这样就可以返回一个字符串 } return s; } }
接下来是解析JSON文件的主要方法:
class Program { static void Main(string[] args) { # region JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("player.txt")); JsonData temp = jsonData; Player player = null; JsonData nameValue = temp["name"]; JsonData levelValue = temp["level"]; JsonData ageValue = temp["age"]; Listlist = new List(); //创建一个空的对象列表,用来存放解析出来的对象数组 foreach(JsonData item in temp["skillList"]) { JsonData idValue = item["id"]; JsonData nameValue1 = item["name"]; JsonData damageValue = item["damage"]; int id = int.Parse(idValue.ToString()); string name1 = nameValue1.ToString(); int damage = int.Parse(damageValue.ToString()); //因为是一个对象中包含一个对象数组,所以需要将这个对象数组先做成一个对象列表,然后再与其他对象属性一起调用目标对象的构造函数 Skill skill = null; skill = new Skill(id, name1, damage); list.Add(skill); } string name = nameValue.ToString(); int level = int.Parse(levelValue.ToString()); int age = int.Parse(ageValue.ToString()); player = new Player(name, level, age, list); Console.WriteLine(player); Console.Read();# endregion } }
上述两种解析方法是解析JSON文件的基础方法,还有一些用泛型的方法简便地解析当JSON文件中对象是同一类型时的文件,但是当JSON文件中的对象不是同一类型时,比如JSON文件中存储的多个对象,这些对象都继承于一个公共基类,同时他们又保存有自身的一些属性方法,此时就不能用泛型的方法进行解析了。就需要使用这种基本的方法构造适当的对象数据结构,进行解析。这是基础,复杂的解析过程是由这些基础的方式累积而成的。
json文件解析的方法就是以上这些,学会最后json文件解析就可以提高大家的开发效率,所以大家可以多实践几次,就会解析文件了!大家如果想要了解更多json工具教程知识,敬请关注奇Q工具网。
推荐阅读: