unity 通过JsonUtility实现json数据的本地保存和读取
本文主要讲解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,不定期更新相关教程:
unity 通过JsonUtility实现json数据的本地保存和读取的更多相关文章
- 保存json数据到本地和读取本地json数据
private void saveJson(JsonBean bean) { File file = new File(getFilesDir(), "json.txt"); Bu ...
- pyhton 从web获取json数据 保存到本地然后再读取
从web中获取json数据直接进行处理总认为太慢.主要是从web中获取获取数据的过程有点慢. 所以就在想 假设先利用空暇时间把json数据获取并保存到本地,然后再从本地文件里读取和操作.应该就要快非常 ...
- 高效遍历匹配Json数据与双层for循环遍历Json数据
工作中往往遇到这种情况,保留用户操作痕迹,比如用户选择过得东西,用户进入其它页面再返回来用户选择的的数据还在. 比如:1.购物车列表中勾选某些,点击任意一项,前往详情页,再返回购物车依旧需要呈现勾选状 ...
- QT json数据的应用(cJSON)
json数据可保存小量的数据在本地的json文件中.QT有两种方式操作:(1).cJSON (2).QT的操作json数据的类. 应用:将监控预案数据保存在本地中. 1.首先根据预案结构创建一个jso ...
- 使用python将mysql数据库的数据转换为json数据
由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问M ...
- Struts2 Action接收POST请求JSON数据及其实现解析
一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...
- C# 读取网页JSON数据
场景描述: 公司和别的系统需要对接,现在对方提供一个网址,数据都是json字符串,我需要对json数据进行处理. 提供的json数据如下格式 一.读取网址中的json数据 public string ...
- SpringMVC札集(07)——JSON数据
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- 【spark】文件读写和JSON数据解析
1.读文件 通过 sc.textFile(“file://") 方法来读取文件到rdd中. val lines = sc.textFile("file://")//文件地 ...
随机推荐
- Linux性能调优命令之free
功能说明 free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存.共享内存将被忽略 语法 free [参数] 参数 -b : 以Byte为单位显示内存使用情况 ...
- yiled
def fib(max): n,a,b = 0,0,1 while n < max: print("hallo") yield b #把函数执行过程冻结在这一步,并且把b的值 ...
- 风变编程(Python自学笔记)第11关-杀死那只“机”生虫
1.Debug:为程序排除错误. 2.SyntaxError:语法错误. 3.append()函数是列表的一个方法,要用句点.调用,且append()每次只能接受一个参数. 4.解决思路不清的两个工具 ...
- .NET平台系列9 .NET Core 3.0 / .NET Core 3.1 详解
系列目录 [已更新最新开发文章,点击查看详细] .NET Core 3.0 于 2019年9月23日发布,重点是增加对同时支持使用 Windwos Forms.WPF 和 Entity Frm ...
- 用JIRA管理你的项目——(一)JIRA环境搭建
JIRA,大家应该都已经不陌生了! 最初接触这个工具的时候,我还在一味地单纯依靠SVN管理代码,幻想着SVN可以有个邮件通知,至少在项目成员进行代码修改的时候,我可以第一时间通过邮件获得这个消息! 当 ...
- [Qt] 组件
组成一个Qt应用的基本元素 窗口(window):一个部件没有嵌入其他部件中,就把这个部件叫做窗口或顶层窗口,顶层窗口没有父窗口 控件(widget):一个窗口嵌入到其他窗口中,这些窗口就叫做控件或子 ...
- CentOS 7 设置日期和时间 timedatectl
CentOS 7 设置日期和时间 在CentOS 6版本,时间设置有date.hwclock命令,从CentOS 7开始,使用了一个新的命令timedatectl. timedatectl [root ...
- 如何用WINPE备份电脑系统;电脑备份 听语音
如何用WINPE备份电脑系统:电脑备份 听语音 原创 | 浏览:1046 | 更新:2017-09-30 15:09 1 2 3 4 5 6 7 分步阅读 备份系统已经成为一种常态,我们在安装完成系统 ...
- Mycat调优启用useOffHeapForMerge报java.lang.NumberFormatException异常解决(附源码)
come from : https://blog.csdn.net/u013716179/article/details/89886452
- MySQL报错ERROR 1436 (HY000): Thread stack overrun:
今天搭私服的时候,卡在角色创建画面,日志报错如上. 这是MySQL报错ERROR 1436 (HY000): Thread stack overrun: 修改方法 vim /etc/my.cnf ...