Json數據解析在Unity3d中的應用

最近作項目過程當中由於Json文件名寫錯了一個字母Unity報錯,找錯誤找到半夜,當時爲了驗錯,寫了一個小Demo,正好藉此總結一下Json.javascript

1.什麼是Json

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(通常用於提高網絡傳輸速率)。html

2.JSON 語法規則

  • 數據在鍵值對中
  • 數據由逗號分隔
  • 花括號保存對象
  • 方括號保存數組

3.Json的結構

  • 對象:對象在js中表示爲「{}」括起來的內容,數據結構爲 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key爲對象的屬性,value爲對應的屬性值,因此很容易理解,取值方法爲 對象.key 獲取屬性值,這個屬性值的類型能夠是 數字、字符串、數組、對象幾種。
  • 數組:數組在js中是中括號「[]」括起來的內容,數據結構爲 ["java","javascript","vb",...],取值方式和全部語言中同樣,使用索引獲取,字段值的類型能夠是 數字、字符串、數組、對象幾種。

4.Json在Unity3d中的使用

  • JsonUtility:JsonUtility是Untiy5.3後新增的內容,有時會出現莫名其妙的錯誤:
    JsonUtility.FromJson():把json字符串轉成對象.
    JsonUtility.ToJson():把對象轉成json字符串.java

  • LitJson:LitJson是一個Json的開源項目,這個比較穩定,推薦使用:
    JsonMapper.ToObject():把json字符串轉成對象.
    JsonMapper.ToJson():把對象轉成json字符串.
    官網下載:http://www.json.org/json-zh.html
    1.png
    放到Unity3d中的Plugin文件夾內
    2.png
    使用的話要注意引入命名空間json

3.png

5.上代碼:

純數組的Json數據比較簡單,在這個Demo中Json數據是一個對象,對象內有一個數組.分別須要用到一個Json對象模型(JsonObjectModel)和一個Json數組模型(JsonArrayModel)來接收這兩種Json數據:數組

  • 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對象模型
public class JsonObjectModel 
{
    //JsonArrayModel類型的列表
    public List<JsonArrayModel> infoList;
    
}
  • JsonArrayModel:Json數組模型
public class JsonArrayModel
{
    //對應Json中屬性 名字要同樣
    public string panelTypeString;
    public string path;
}
  • JsonDeserialize:Json解析程序,掛在場景中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);
        }

    }
}
  • 輸出結果:
    5.png

6.Demo源代碼

連接:http://pan.baidu.com/s/1jHVP9m2 密碼:e9h8網絡

相關文章
相關標籤/搜索