json文件怎么解析?json文件解析方法

阳光 2021-02-05 22:16:53 java常见问答 6739

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工具网。

推荐阅读:

如何运行一个java程序?java跨平台编写要注意什么?

java开发有哪些板块?java开发常用框架版块

java创建对象的四种方式有哪些?具体方式详解