Unity 基礎(chǔ)之LitJSON

最近接手一個(gè)項(xiàng)目,在項(xiàng)目中有用到Json的地方,根據(jù)網(wǎng)上找到的資料 客戶端配置文件優(yōu)化策略,綜合評(píng)定發(fā)現(xiàn)LitJson還不錯(cuò)勾徽,于是找到Json下載的網(wǎng)站的網(wǎng)站下載對(duì)應(yīng)的Json祠锣,進(jìn)入LitJson后盡然提示我 404! WTF继找?!L友亍婴渡!我可是會(huì)科學(xué)上網(wǎng)的人,于是去GitHub下載LitJSON,發(fā)現(xiàn)最近幾天剛更新過(guò)感挥,估計(jì)性能會(huì)更好缩搅,但是只有對(duì)應(yīng)的源碼,沒(méi)有DLL触幼,也不要緊硼瓣,我已經(jīng)幫你把源碼轉(zhuǎn)成DLL了,LitJSON對(duì)應(yīng)DLL下載

更新目錄

  • 更新 2018.05.18 目前測(cè)試發(fā)現(xiàn)如果轉(zhuǎn)換類(lèi)中的字典Key為int時(shí)會(huì)有報(bào)錯(cuò)的情況

  • 更新 2019.04.6 序列化有float值時(shí)會(huì)報(bào)錯(cuò)Max allowed object depth reached while trying to export from type System.Single置谦,需要把float轉(zhuǎn)換成double

  • 更新 2019.12.12 更新版本 LitJSON 0.15.0


下面來(lái)簡(jiǎn)單介紹下LitJson的使用方法堂鲤,更多示例參考GitHub上的文檔

示例所示,JsonMapper.ToJson將制定數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為Json字符媒峡,JsonMapper.ToObject<T>用于將Json字符轉(zhuǎn)換為指定數(shù)據(jù)結(jié)構(gòu)


這個(gè)示例介紹的是活的JsonData也可以按照索引器的方式訪問(wèn)指定的元素

image.png

最后一個(gè)示例就是 JsonReaderJsonWriter 瘟栖, 這兩種類(lèi)型實(shí)際上是該庫(kù)的基礎(chǔ),并且JsonMapper類(lèi)型建立在它們之上谅阿,所以開(kāi)發(fā)人員可以將JsonReaderJsonWriter類(lèi)視為L(zhǎng)itJSON的低級(jí)編程接口半哟。

完整Code

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using System;
using LitJson;
using Custom.Log;
using System.Text;

public class LitJsonExample : MonoBehaviour
{
    void Start()
    {
        //PersonToJson();
        //JsonToPerson();

        //LoadAlbumData(json);

        PrintJson(sample);
        this.Log(new String('-', 100));
        WriterJson();
    }

    #region 方案一
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
    }
    public void PersonToJson()
    {
        Person HaiLan = new Person();

        HaiLan.Name = "菜鳥(niǎo)海瀾";
        HaiLan.Age = 51;
        HaiLan.Birthday = new DateTime(2018, 05, 17);

        string JsonStr = JsonMapper.ToJson(HaiLan);

        this.Log(JsonStr);
    }

    public void JsonToPerson()
    {
        string json = @"
            {
                ""Name""     : ""菜鳥(niǎo)海瀾"",
                ""Age""      : 2018,
                ""Birthday"" : ""05/17/2018 00:00:00""
            }";

        Person HaiLan = JsonMapper.ToObject<Person>(json);

        this.Log("JsonToPerson Is Name:" + HaiLan.Name);
    }

    #endregion

    #region 方案二
    string json = @"
          {
            ""album"" : {
              ""name""   : ""The Dark Side of the Moon"",
              ""artist"" : ""Pink Floyd"",
              ""year""   : 1973,
              ""tracks"" : [
                ""Speak To Me"",
                ""Breathe"",
                ""On The Run""
              ]
            }
          }
        ";

    public void LoadAlbumData(string json_text)
    {
        Debug.Log("Reading data from the following JSON string: " + json_text);

        JsonData data = JsonMapper.ToObject(json_text);

        // 像哈希表一樣訪問(wèn)字典
        this.Log("Album's name: {0}", data["album"]["name"]);

        // 存儲(chǔ)在JsonData實(shí)例中的標(biāo)量元素可以轉(zhuǎn)換為它們的自然類(lèi)型
        string artist = (string)data["album"]["artist"];
        int year = (int)data["album"]["year"];

        this.Log("Recorded by {0} in {1}", artist, year);

        // 數(shù)組也像常規(guī)列表一樣被訪問(wèn)
        this.Log("First track: {0}", data["album"]["tracks"][0]);
    }
    #endregion

    #region 方案三
    string sample = @"{
            ""name""  : ""菜鳥(niǎo)海瀾"",
            ""age""   : 2018,
            ""awake"" : true,
            ""n""     : 2018.0517,
            ""note""  : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]
          }";

    public  void PrintJson(string json)
    {
        JsonReader reader = new JsonReader(json);

        this.Log("{0,14} {1,10} {2,16}", "Token", "Value", "Type");
        this.Log(new String('-', 100));

        // Read()方法返回false時(shí),沒(méi)有其他內(nèi)容可讀
        while (reader.Read())
        {
            string type = reader.Value != null ?
                reader.Value.GetType().ToString() : "";

            this.Log("{0,14} {1,10} {2,16}",
                              reader.Token, reader.Value, type);
        }
    }

    public  void WriterJson()
    {
        StringBuilder sb = new StringBuilder();
        JsonWriter writer = new JsonWriter(sb);

        writer.WriteArrayStart();
        writer.Write(1);
        writer.Write(2);
        writer.Write(3);

        writer.WriteObjectStart();
        writer.WritePropertyName("color");
        writer.Write("blue");
        writer.WriteObjectEnd();

        writer.WriteArrayEnd();

        this.Log(sb.ToString());
    }
    #endregion
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末签餐,一起剝皮案震驚了整個(gè)濱河市寓涨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氯檐,老刑警劉巖戒良,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冠摄,居然都是意外死亡糯崎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)河泳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沃呢,“玉大人,你說(shuō)我怎么就攤上這事拆挥≌敛澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)黄锤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)食拜,這世上最難降的妖魔是什么鸵熟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮负甸,結(jié)果婚禮上流强,老公的妹妹穿的比我還像新娘。我一直安慰自己呻待,他們只是感情好打月,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蚕捉,像睡著了一般奏篙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迫淹,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天秘通,我揣著相機(jī)與錄音,去河邊找鬼敛熬。 笑死肺稀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的应民。 我是一名探鬼主播话原,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诲锹!你這毒婦竟也來(lái)了繁仁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辕狰,失蹤者是張志新(化名)和其女友劉穎改备,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蔓倍,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悬钳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偶翅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片默勾。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖聚谁,靈堂內(nèi)的尸體忽然破棺而出母剥,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布环疼,位于F島的核電站习霹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏炫隶。R本人自食惡果不足惜淋叶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伪阶。 院中可真熱鬧煞檩,春花似錦、人聲如沸栅贴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)檐薯。三九已至凝赛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厨剪,已是汗流浹背哄酝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祷膳,地道東北人陶衅。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像直晨,于是被迫代替她去往敵國(guó)和親搀军。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理勇皇,服務(wù)發(fā)現(xiàn)罩句,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 相關(guān)鏈接 dll 文件敛摘,點(diǎn)擊即下載 LitJson 官網(wǎng) 聲明命名空間 ps: 直接將 .dll 文件拖入 Un...
    binyu1231閱讀 25,855評(píng)論 4 7
  • JSON的特點(diǎn): 1门烂、JSON比XML的數(shù)據(jù)傳遞的有效性高;2兄淫、JSON完全獨(dú)立于編程語(yǔ)言屯远;3、JSON的本質(zhì)是具...
    程序員之路閱讀 3,484評(píng)論 0 3
  • 早起的好處演講版(演講錄音版練習(xí)動(dòng)作) (開(kāi)場(chǎng)白捕虽,讓自己放松緊張) 調(diào)查 首先問(wèn)大家7點(diǎn)床的有多少人慨丐、6點(diǎn)起床的有...
    拾面埋伏閱讀 2,756評(píng)論 0 3
  • 近日,一封7歲小孩手寫(xiě)的道歉信火遍了整個(gè)網(wǎng)絡(luò)泄私》拷遥“對(duì)不 qi备闲,今天我 zhuang shang 一位弟弟……”從歪...
    白兔糖atom閱讀 501評(píng)論 0 1