Json數(shù)據(jù)解析在Unity3d中的應(yīng)用

最近做項(xiàng)目過(guò)程中因?yàn)镴son文件名寫(xiě)錯(cuò)了一個(gè)字母Unity報(bào)錯(cuò),找錯(cuò)誤找到半夜,當(dāng)時(shí)為了驗(yàn)錯(cuò),寫(xiě)了一個(gè)小Demo,正好借此總結(jié)一下Json.

1.什么是Json

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于ECMAScript的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成(一般用于提升網(wǎng)絡(luò)傳輸速率)。

2.JSON 語(yǔ)法規(guī)則

  • 數(shù)據(jù)在鍵值對(duì)中
  • 數(shù)據(jù)由逗號(hào)分隔
  • 花括號(hào)保存對(duì)象
  • 方括號(hào)保存數(shù)組

3.Json的結(jié)構(gòu)

  • 對(duì)象:對(duì)象在js中表示為“{}”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,...}的鍵值對(duì)的結(jié)構(gòu),在面向?qū)ο蟮恼Z(yǔ)言中,key為對(duì)象的屬性,value為對(duì)應(yīng)的屬性值,所以很容易理解,取值方法為 對(duì)象.key 獲取屬性值,這個(gè)屬性值的類(lèi)型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。
  • 數(shù)組:數(shù)組在js中是中括號(hào)“[]”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 ["java","javascript","vb",...],取值方式和所有語(yǔ)言中一樣,使用索引獲取,字段值的類(lèi)型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。

4.Json在Unity3d中的使用

  • JsonUtility:JsonUtility是Untiy5.3后新增的內(nèi)容,有時(shí)會(huì)出現(xiàn)莫名其妙的錯(cuò)誤:
    JsonUtility.FromJson():把json字符串轉(zhuǎn)成對(duì)象.
    JsonUtility.ToJson():把對(duì)象轉(zhuǎn)成json字符串.

  • ** LitJson**:LitJson是一個(gè)Json的開(kāi)源項(xiàng)目,這個(gè)比較穩(wěn)定,推薦使用:
    JsonMapper.ToObject():把json字符串轉(zhuǎn)成對(duì)象.
    JsonMapper.ToJson():把對(duì)象轉(zhuǎn)成json字符串.
    官網(wǎng)下載:http://www.json.org/json-zh.html

    1.png

    放到Unity3d中的Plugin文件夾內(nèi)
    2.png

    使用的話要注意引入命名空間

3.png

5.上代碼:

純數(shù)組的Json數(shù)據(jù)比較簡(jiǎn)單,在這個(gè)Demo中Json數(shù)據(jù)是一個(gè)對(duì)象,對(duì)象內(nèi)有一個(gè)數(shù)組.分別需要用到一個(gè)Json對(duì)象模型(JsonObjectModel)和一個(gè)Json數(shù)組模型(JsonArrayModel)來(lái)接收這兩種Json數(shù)據(jù):

  • Json源文件
{
  "infoList": [
    {
      "panelTypeString": "ItemMessage",
      "path": "UIPanel/ItemMessagePanel"
    },
    {
      "panelTypeString": "Knapsack",
      "path": "UIPanel/KnapsackPanel"
    },
    {
      "panelTypeString": "MainMenu",
      "path": "UIPanel/MainMenuPanel"
    },
    {
      "panelTypeString": "Shop",
      "path": "UIPanel/ShopPanel"
    },
    {
      "panelTypeString": "Skill",
      "path": "UIPanel/SkillPanel"
    },
    {
      "panelTypeString": "System",
      "path": "UIPanel/SystemPanel"
    },
    {
      "panelTypeString": "Task",
      "path": "UIPanel/TaskPanel"
    }
  ]
}
  • JsonObjectModel:Json對(duì)象模型
public class JsonObjectModel 
{
    //JsonArrayModel類(lèi)型的列表
    public List<JsonArrayModel> infoList;
    
}
  • JsonArrayModel:Json數(shù)組模型
public class JsonArrayModel
{
    //對(duì)應(yīng)Json中屬性 名字要一樣
    public string panelTypeString;
    public string path;
}
  • JsonDeserialize:Json解析程序,掛在場(chǎng)景中JsonManager上
public class JsonDeserialize : MonoBehaviour
{  
    void Start( )
    {
         //獲取Json文件
        TextAsset jsonData = Resources.Load<TextAsset>("JsonData");

        JsonObjectModel jsonObject = JsonMapper.ToObject<JsonObjectModel>(jsonData.text);

        foreach (var info in  jsonObject.infoList)
        {
            Debug.Log(info.panelTypeString+" "+info.path);
        }

    }
}
  • 輸出結(jié)果:


    5.png

6.Demo源代碼

鏈接:http://pan.baidu.com/s/1jHVP9m2 密碼:e9h8

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,627評(píng)論 18 399
  • 參考基礎(chǔ)教程的整理,方便記憶 一、Object對(duì)象 (O大寫(xiě)) 所有其他對(duì)象都繼承自這個(gè)對(duì)象。Object本身也是...
    Viaphlyn閱讀 2,453評(píng)論 0 0
  • 一般來(lái)說(shuō),我會(huì)帶著耳機(jī),聽(tīng)著最新下載中國(guó)新歌聲的音樂(lè),讓自己沉淀半個(gè)小時(shí),慢慢地讓感覺(jué)全身暢行,讓自己的思緒飄到遠(yuǎn)...
    梁慕晨閱讀 438評(píng)論 0 0
  • 節(jié)選自《演講的本質(zhì)》 R:(Reading,閱讀一個(gè)原文片段) 請(qǐng)記住無(wú)論是非正式的談話中,還是正式的演講中,你應(yīng)...
    予含閱讀 884評(píng)論 0 0
  • 前些天,姐姐家的小女兒來(lái)家里玩。她用奶聲奶氣的聲音說(shuō):“這個(gè)世界上,跟我最親的人是我的媽媽?!贝蠹覇?wèn)她:“...
    whxia閱讀 174評(píng)論 0 0

友情鏈接更多精彩內(nèi)容