笔记31 Json系统的创建与解析

数据的格式

在这里插入图片描述

Json

Json的格式化、映射

在这里插入图片描述

Json的创建(系统方式JsonUtility)

简单(一组信息)

在这里插入图片描述

复杂(多组信息)

在这里插入图片描述
在这里插入图片描述

Json的解析(系统方式JsonUtility)

在这里插入图片描述

Json的创建和解析+代码(第三方插件LitJson之法一)

在这里插入图片描述

using LitJson;
//添加名称空间using LitJson; 

public class Hero
{
    public string name;
    public int age;
}
public class Heros
{
    public Hero[] heros;
}

public class LigJson : MonoBehaviour
{
    void Start()
    {
        //调用第一种创建和解析Json的方法
        func1();  
    }

    void func1()
    {
        //第一种创建和解析Json的方法
        Hero hero1 = new Hero();
        hero1.name = "超人";
        hero1.age = 35;

        Hero hero2 = new Hero();
        hero2.name = "蝙蝠侠";
        hero2.age = 34;

        //数组
        Heros heros = new Heros();
        heros.heros = new Hero[] { hero1, hero2 };

        //创建。
        //如果是系统方法。转Json就用ToJson。接着Debug出来。
        string jsonStr = JsonMapper.ToJson(heros);
        Debug.Log(jsonStr);
        //结果:{"heros":[{"name":"\u8D85\u4EBA","age":35},{"name":"\u8759\u8760\u4FA0","age":34}]}
        //它会将所有的中文转成Unicode编码。

        //解析。解析方法ToObject<解析完是什么类型的Heros>(要解析的字符串jsonStr)
        Heros hs = JsonMapper.ToObject<Heros>(jsonStr);
        //打印、遍历都行。此处打印结果:蝙蝠侠。
        Debug.Log(hs.heros[1].name);
    }
}

Json的创建和解析(第三方插件LitJson之法二)

创建:简单(一组信息)

不要忘记:添加名称空间using LitJson;
在这里插入图片描述

创建和解析:复杂(多组信息)——代码(常用)

ing LitJson;
//添加名称空间using LitJson; 

public class LigJson : MonoBehaviour
{
    void Start()
    {
        //调用第二种创建Json的方法。此处因为调用func3,才注释掉func2
        //func2();
        //调用第二种解析Json的方法
        func3();
    }
    void func2()
    {
        //第二种创建和解析Json的方法
        //例如想创建最简单的格式{"name":"超人", "age": 35}。不想写上面的类。
        //JsonData代表了Json中的各种类型。        
        JsonData jd1 = new JsonData();
        //JsonType.出现可选择的基本类型。
        //类就代表字典,所以Object代表大括号。Array代表数组,也就是中括号。
        //这行代码可以省略。此处显示出来,就是一个大括号,就是一个对象。超人是Object
        jd1.SetJsonType(JsonType.Object);
        //赋值就按照字典的方式赋值
        jd1["name"] = "超人";
        jd1["age"] = 35;

        JsonData jd2 = new JsonData();
        jd2.SetJsonType(JsonType.Object);
        jd2["name"] = "蝙蝠侠";
        jd2["age"] = 37;

        //注意它俩在一个数组,所以是Array
        JsonData jds = new JsonData();
        jds.SetJsonType(JsonType.Array);
        //放入方法,和一般的数组一样,用Add
        jds.Add(jd1);
        jds.Add(jd2);
        //此时打印Debug.Log(jds.ToJson());,结果缺少在外层的大括号。
        //结果:[{"name":"\u8D85\u4EBA","age":35},{"name":"\u8759\u8760\u4FA0","age":37}]
        //添加最外层的大括号。又是Object了
        JsonData heroJD = new JsonData();
        heroJD.SetJsonType(JsonType.Object);
        //它只有一个键值对
        heroJD["heros"] = jds;

        //ToJson就是把当前的JsonData转成对应的Json
        Debug.Log(heroJD.ToJson());
        //结果:{"heros":[{"name":"\u8D85\u4EBA","age":35},{"name":"\u8759\u8760\u4FA0","age":37}]}
    }
    //调用第二种解析Json的方法
    void  func3()
    {
        //现在拿到一个Json
        string jsonStr = "{'heros':[{'name':'超人', 'age':35},{'name':'蝙蝠侠','age':37}]}";
        //解析。最后拿到的还是JsonData。解析ToObject<最外层herosJD是什么类型Heros>
        //而第二种解析方法就是不用泛型,直接把jsonStr放小括号里。它返回的类型都变成JsonData了。
        JsonData herosJD = JsonMapper.ToObject(jsonStr);
        //数组
        JsonData heros = herosJD["heros"];
        //快速遍历
        foreach(JsonData heroJD in heros)
        {
            // Debug.Log(heroJD["name"]);得到的name还是JsonDate类型。
            //
            Debug.Log(heroJD["name"].ToString() + " " + (int)heroJD["age"]);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章