unity 通过JsonUtility实现json数据的本地保存和读取
时间:2021-06-24 18:15:32
收藏:0
阅读:0
本文主要讲解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,不定期更新相关教程:
评论(0)