1. 程式人生 > 其它 >unity 通過JsonUtility實現json資料的本地儲存和讀取

unity 通過JsonUtility實現json資料的本地儲存和讀取

本文主要講解json資料在本地的儲存和讀取,使用的是unity5之後提供的JsonUtility工具。

一、關於json資料的儲存

在實際開發中,有時候可能涉及到大量資料儲存到本地,以便於下次客戶端的使用,這時候將資料儲存成json檔案到本地就比較方便了,具體實現方法如下:

檔案的建立,下面為便於編輯器和手機端都方便使用,我們將檔案儲存到StreamingAssets中:

  1. //儲存json檔案路徑
  2. string JsonPath()
  3. {
  4. return Application.streamingAssetsPath + "/JsonTest.json";
  5. }

建立要儲存的資料格式,這裡建立了對應的玩家資料類

  1. public class JsonData
  2. {
  3. public List<PlayerMessage> lsPlayerMessage;
  4. }
  5. //玩家資訊
  6. [Serializable]
  7. public class PlayerMessage
  8. {
  9. public int PlayerId;
  10. public string PlayerName;
  11. public List<EquipMessage> PlayerEquip;
  12. }
  13. //裝備資訊
  14. [Serializable]
  15. public class EquipMessage
  16. {
  17. public
    int EquipId;
  18. public string EquipName;
  19. }

將對應的資料儲存到對應的容器中,這裡隨便添加了一些初始值 ,進行測試:

  1. //初始化json資料
  2. void InitJsonData()
  3. {
  4. jsonData.lsPlayerMessage = new List<PlayerMessage>();
  5. PlayerMessage playerMessage = new PlayerMessage();
  6. playerMessage.PlayerId = 1;
  7. playerMessage.PlayerName = "Json"
    ;
  8. playerMessage.PlayerEquip = new List<EquipMessage>();
  9. EquipMessage equipMessage = new EquipMessage();
  10. equipMessage.EquipId = 101;
  11. equipMessage.EquipName = "Gun";
  12. playerMessage.PlayerEquip.Add(equipMessage);
  13. jsonData.lsPlayerMessage.Add(playerMessage);
  14. }

最後是講上面json資料儲存到本地:

  1. //儲存json資料到本地
  2. void SaveJson()
  3. {
  4. //如果本地沒有對應的json 檔案,重新建立
  5. if (!File.Exists(JsonPath()))
  6. {
  7. File.Create(JsonPath());
  8. }
  9. string json = JsonUtility.ToJson(jsonData, true);
  10. File.WriteAllText(JsonPath(), json);
  11. Debug.Log("儲存成功");
  12. }

執行結果如下:

二、關於json檔案的讀取:

  1. //從本地讀取json資料
  2. void ReadJson()
  3. {
  4. if (!File.Exists(JsonPath()))
  5. {
  6. Debug.LogError("讀取的檔案不存在!");
  7. return;
  8. }
  9. string json = File.ReadAllText(JsonPath());
  10. JsonData jsonTemp = new JsonData();
  11. jsonTemp = JsonUtility.FromJson<JsonData>(json);
  12. Debug.Log("玩家數量:" + jsonTemp.lsPlayerMessage.Count);
  13. for (int i = 0; i < jsonTemp.lsPlayerMessage.Count; i++)
  14. {
  15. Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerId);
  16. Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerName);
  17. for (int j = 0; j < jsonTemp.lsPlayerMessage[i].PlayerEquip.Count; j++)
  18. {
  19. Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerEquip[j].EquipId);
  20. Debug.Log(jsonTemp.lsPlayerMessage[i].PlayerEquip[j].EquipName);
  21. }
  22. }
  23. }

執行結果如下:

這就是全部的關於josn的資料本地和儲存。

工程連結:https://pan.baidu.com/s/1Rz6rpNj1jPS0t9NklFOhRw

想了解更過unity相關知識,可以關注下方公眾號,或者新增QQ群:879354767,不定期更新相關教程: