筆記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"]);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章