unity 通過JsonUtility實現json資料的本地儲存和讀取
阿新 • • 發佈:2021-06-24
本文主要講解json資料在本地的儲存和讀取,使用的是unity5之後提供的JsonUtility工具。
一、關於json資料的儲存
在實際開發中,有時候可能涉及到大量資料儲存到本地,以便於下次客戶端的使用,這時候將資料儲存成json檔案到本地就比較方便了,具體實現方法如下:
檔案的建立,下面為便於編輯器和手機端都方便使用,我們將檔案儲存到StreamingAssets中:
- //儲存json檔案路徑
- string JsonPath()
- {
- return Application.streamingAssetsPath + "/JsonTest.json";
- }
建立要儲存的資料格式,這裡建立了對應的玩家資料類
- public class JsonData
- {
- public List<PlayerMessage> lsPlayerMessage;
- }
-
- //玩家資訊
- [Serializable]
- public class PlayerMessage
- {
- public int PlayerId;
- public string PlayerName;
- public List<EquipMessage> PlayerEquip;
- }
-
- //裝備資訊
- [Serializable]
- public class EquipMessage
- {
- public
int EquipId; - public string EquipName;
- }
將對應的資料儲存到對應的容器中,這裡隨便添加了一些初始值 ,進行測試:
- //初始化json資料
- void InitJsonData()
- {
- jsonData.lsPlayerMessage = new List<PlayerMessage>();
- PlayerMessage playerMessage = new PlayerMessage();
- playerMessage.PlayerId = 1;
- playerMessage.PlayerName = "Json"
; - playerMessage.PlayerEquip = new List<EquipMessage>();
- EquipMessage equipMessage = new EquipMessage();
- equipMessage.EquipId = 101;
- equipMessage.EquipName = "Gun";
- playerMessage.PlayerEquip.Add(equipMessage);
- jsonData.lsPlayerMessage.Add(playerMessage);
- }
最後是講上面json資料儲存到本地:
- //儲存json資料到本地
- void SaveJson()
- {
- //如果本地沒有對應的json 檔案,重新建立
- if (!File.Exists(JsonPath()))
- {
- File.Create(JsonPath());
- }
- string json = JsonUtility.ToJson(jsonData, true);
- File.WriteAllText(JsonPath(), json);
- Debug.Log("儲存成功");
- }
執行結果如下:
二、關於json檔案的讀取:
- //從本地讀取json資料
- void ReadJson()
- {
- if (!File.Exists(JsonPath()))
- {
- Debug.LogError("讀取的檔案不存在!");
- return;
- }
- string json = File.ReadAllText(JsonPath());
- JsonData jsonTemp = new JsonData();
- jsonTemp = JsonUtility.FromJson<JsonData>(json);
- Debug.Log("玩家數量:" + jsonTemp.lsPlayerMessage.Count);
- for (int i = 0; i < jsonTemp.lsPlayerMessage.Count; i++)
- {
- Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerId);
- Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerName);
- for (int j = 0; j < jsonTemp.lsPlayerMessage[i].PlayerEquip.Count; j++)
- {
- Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerEquip[j].EquipId);
- Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerEquip[j].EquipName);
- }
- }
- }
執行結果如下:
這就是全部的關於josn的資料本地和儲存。
工程連結:https://pan.baidu.com/s/1Rz6rpNj1jPS0t9NklFOhRw
想了解更過unity相關知識,可以關注下方公眾號,或者新增QQ群:879354767,不定期更新相關教程: