最近作項目過程當中由於Json文件名寫錯了一個字母Unity報錯,找錯誤找到半夜,當時爲了驗錯,寫了一個小Demo,正好藉此總結一下Json.javascript
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(通常用於提高網絡傳輸速率)。html
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
放到Unity3d中的Plugin文件夾內
使用的話要注意引入命名空間json
純數組的Json數據比較簡單,在這個Demo中Json數據是一個對象,對象內有一個數組.分別須要用到一個Json對象模型(JsonObjectModel)和一個Json數組模型(JsonArrayModel)來接收這兩種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" } ] }
public class JsonObjectModel { //JsonArrayModel類型的列表 public List<JsonArrayModel> infoList; }
public class JsonArrayModel { //對應Json中屬性 名字要同樣 public string panelTypeString; public string path; }
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); } } }
連接:http://pan.baidu.com/s/1jHVP9m2 密碼:e9h8網絡