最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Unity JSON編碼解碼 之 LitJson 深度剖析

2022-08-19 16:09 作者:游戲開發(fā)RAIN  | 我要投稿

1: 什么是JSON


JSON(JavaScript Object Notation, JS對象簡譜)是一種輕量級的數(shù)據(jù)交換格式。它是基于

ECMAScript(European Computer Manufacturers Association, 歐洲計算機協(xié)會制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。

簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。接下來看下JSON格式中定義的數(shù)據(jù)類型:



接下來看下一個示例的JSON文本:

{ status:0,isActive:false,damond: 100, HP: 65.4, Desic: “丹書鐵卷”, [100, false, {..}, [..], “hi”], }

注意: 其中Boolean, Double, Float, Int, Long, String屬于基本數(shù)據(jù)類型,Object, Array屬于容器,可以存放數(shù)據(jù),Object/Array中可以嵌套Object/Array。


搞懂了JSON的文本格式后,接下來分析下JSON編碼解碼的基本原理。

編碼/序列化: 任何編程語言的數(shù)據(jù)對象,最終的數(shù)據(jù)都可以用上面的類型來進行表示,最后把對應(yīng)的類型生成文本即可。

解碼/反序列化: 解析文本的類型符號,比如{,開頭就是Object, [ 開頭就是Array, 解析到true,false表示是Boolean類型。


JSON格式標準出來后,幾乎每個平臺的每種編程語言都有對應(yīng)的JSON庫來做編碼解碼,不用我們自己來實現(xiàn),在Unity C#里面我們經(jīng)常采用LitJson來做JSON文本的編碼解碼。


2: Unity中如何使用LitJson

Unity項目中使用LitJson,操作起來也十分簡單。接下來我們詳細的操作一下,具體步驟如下:

(1): 創(chuàng)建一個標準的Unity項目,下載LitJson的代碼庫,我一般會新建一個3rd文件夾,把LitJson的代碼庫放入到項目中,如圖所示:

(2): 編寫一個測試節(jié)點,掛一個測試代碼,用來測試與講解LitJson庫的使用,同時編寫一個JsonText.txt的文本資源,作為測試的Json文本,如圖:

(3): Json編碼

定義一個簡單的數(shù)據(jù)對象GameItem, 如下

class GameItem {

public int a;

public bool b;

public float c;

public string str;

}

創(chuàng)建一個GameItem 對象,并初始化里面的數(shù)據(jù),如下:

GameItem item = new GameItem ();

item.a = 10; item.b = false;

item.c = 74.0f; item.str = "hello";


調(diào)用JsonMapper的ToJson方法,把對象轉(zhuǎn)成Json String, 如下:

string jsonStr = JsonMapper.ToJson(item);

Debug.Log(jsonStr);

運行結(jié)果為: {"a":10,"b":false,"c":74,"str":"hello"},?

(4) Json解碼

從JsonText.txt文件里面加載TextAsset資源,或去資源中的文本對象,得到JsonStr, 調(diào)用JsonWrapper對象的ToObject方法得到JsonData的數(shù)據(jù)對象。

JsonData jsonObject = JsonMapper.ToObject(jsonTxt.text);

解析出來jsonObject后,可以根據(jù)json中的對象類型來直接訪問即可。

JsonData rst = jsonObject["rst"]; // 子Object對象

JsonData partnerList = rst["partnerCodeList"]; // 數(shù)組對象

JsonData partner0 = partnerList[0]; // 用數(shù)組方式訪問

JsonData可以強轉(zhuǎn)成任意的基本數(shù)據(jù)類型,string, float, double, boolean, int等。

:具體的LitJson代碼可以關(guān)注我們,來獲取源碼。


3:LitJson核心源碼分析


LitJson使用起來如此簡單,那么它是具體怎么實現(xiàn)的呢?接下來我們來分析LitJson源碼來學(xué)習(xí)它代碼開發(fā)的一些技巧。首先要看下JsonData數(shù)據(jù)結(jié)構(gòu),在LitJson內(nèi)部,每個數(shù)據(jù)對象都是一個JsonData對象。

JsonData里面包含了一個JsonType type的數(shù)據(jù)成員,用來表示這個JsonData的數(shù)據(jù)對象是一個什么樣的數(shù)據(jù)類型。JsonType是一個枚舉,正好是所有可能的Json的數(shù)據(jù)類型,

如果這個數(shù)據(jù)類型是一個Boolean,數(shù)據(jù)值就存放在inst_boolean變量里面,如果數(shù)據(jù)類型是一個string, 數(shù)據(jù)值就存放在inst_string變量里面。

在JSON中,Object與Array是容器,所以在JsonData里面分別用Dictionary<string, JsonData>與List<JsonData>來作為Object與Array的容器,容器中的每個元素又是一個JsonData,所以就實現(xiàn)了容器中可以有容器對象+數(shù)據(jù)對象。

JsonData中重載了[]操作符,方便容器對象來去數(shù)據(jù),

Object 容器對象[key]操作重載

數(shù)組容器對象的[index]操作重載

JsonData中重載了類型強轉(zhuǎn)操作符,讓我們能直接通過強轉(zhuǎn)Json來獲取基本的數(shù)據(jù):

Int, Float, Double, Boolean, String。

通過強轉(zhuǎn)基本數(shù)據(jù)到JsonData,來獲取JsonData,?

這樣非常方便的讓我們生成了JsonData,非常方便的能通過JsonData獲取數(shù)據(jù)。

JsonWrapper來解析Json字符串的時候,就是讀取文本內(nèi)容,來根據(jù)對應(yīng)的Token符號來生成對應(yīng)的Json對象,具體可以閱讀源碼:

JSON與LitJson的分析就到這里了

感興趣的可以加一下我的學(xué)習(xí)交流群哦(我的簡介里有)

Unity JSON編碼解碼 之 LitJson 深度剖析的評論 (共 條)

分享到微博請遵守國家法律
兴隆县| 理塘县| 丽江市| 乌恰县| 河池市| 峨眉山市| 富锦市| 昌都县| 涞源县| 共和县| 汶川县| 瑞金市| 澄迈县| 沛县| 甘孜| 射洪县| 二连浩特市| 田东县| 五大连池市| 墨竹工卡县| 博爱县| 大竹县| 土默特右旗| 韶山市| 彩票| 桓台县| 海宁市| 界首市| 黔江区| 嵊泗县| 呈贡县| 柯坪县| 闸北区| 礼泉县| 木里| 麦盖提县| 宕昌县| 克拉玛依市| 西贡区| 得荣县| 常宁市|