本文主要讲解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,不定期更新相关教程: