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

unity 通过JsonUtility实现json数据的本地保存和读取的更多相关文章

  1. 保存json数据到本地和读取本地json数据

    private void saveJson(JsonBean bean) { File file = new File(getFilesDir(), "json.txt"); Bu ...

  2. pyhton 从web获取json数据 保存到本地然后再读取

    从web中获取json数据直接进行处理总认为太慢.主要是从web中获取获取数据的过程有点慢. 所以就在想 假设先利用空暇时间把json数据获取并保存到本地,然后再从本地文件里读取和操作.应该就要快非常 ...

  3. 高效遍历匹配Json数据与双层for循环遍历Json数据

    工作中往往遇到这种情况,保留用户操作痕迹,比如用户选择过得东西,用户进入其它页面再返回来用户选择的的数据还在. 比如:1.购物车列表中勾选某些,点击任意一项,前往详情页,再返回购物车依旧需要呈现勾选状 ...

  4. QT json数据的应用(cJSON)

    json数据可保存小量的数据在本地的json文件中.QT有两种方式操作:(1).cJSON (2).QT的操作json数据的类. 应用:将监控预案数据保存在本地中. 1.首先根据预案结构创建一个jso ...

  5. 使用python将mysql数据库的数据转换为json数据

    由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问M ...

  6. Struts2 Action接收POST请求JSON数据及其实现解析

    一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...

  7. C# 读取网页JSON数据

    场景描述: 公司和别的系统需要对接,现在对方提供一个网址,数据都是json字符串,我需要对json数据进行处理. 提供的json数据如下格式 一.读取网址中的json数据 public string ...

  8. SpringMVC札集(07)——JSON数据

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  9. 【spark】文件读写和JSON数据解析

    1.读文件 通过 sc.textFile(“file://") 方法来读取文件到rdd中. val lines = sc.textFile("file://")//文件地 ...

随机推荐

  1. 使用PuTTY连接Azure VM

    使用PuTTY连接Azure VMhtml { -webkit-print-color-adjust: exact } * { box-sizing: border-box; -webkit-prin ...

  2. Mac 无密码 SSH 登录服务器

    Mac 无密码 SSH 登录服务器,只需要简单三步,不再需要记住账号密码,快速进入服务器 第一步,生成密钥对 在当前用户下创建.ssh目录 mkdir ~/.ssh 使用命令ssh-keygen生成密 ...

  3. Docker的介绍和安装(1)

    一.虚拟化简介 1.虚拟化概念 计算机虚拟化(Computing Virtualization),一种资源管理技术,是指通过虚拟化技术将一台计算机的各种实体资源 , 如处理器 , 网络 , 内存及存储 ...

  4. S8 Linux磁盘与文件系统管理命令

    8.1 fdisk:磁盘分区工具 8.2-3 partprobe.tune2fs 8.4 parted:磁盘分区工具 8.5-7 mkfs.dumpe2fs.resize2fs 8.8-9 fsck. ...

  5. java基础之8种基本数据类型

    简单往往是最重要的,在刚刚学java的时候老师会给我们先讲这8种基本数据类型,今天再来做一个温习,[本文大部分参考了 https://zhuanlan.zhihu.com/p/25439066,在上面 ...

  6. Java反射机制详情(2)

    | |目录 运行环境 Java语言的反射机制 Class中的常用方法(获得类的构造方法) Class中的常用方法(获得类的属性) Class中的常用方法(获得类的方法) 反射动态调用类的成员 1.运行 ...

  7. Apple iWork(Pages、Numbers、Keynote)11.0 发布

    苹果今天将其专为 iOS 和 macOS 设备设计的 iWork 应用套件更新为版本 11,引入了许多新功能和改进功能. Pages 文稿. 文档高手,精美不言而喻. 进一步了解 Pages 文稿 & ...

  8. 日常Bug排查-消息不消费

    日常Bug排查-消息不消费 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 某天下午,在笔者研究某个问题正high的时候.开 ...

  9. 机器学习算法之K近邻算法

    0x00 概述   K近邻算法是机器学习中非常重要的分类算法.可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等. 0x01 原理   ...

  10. Guava Cache,Java本地内存缓存使用实践

    Guava Cache,网上介绍很多,我就不赘述了. 分享一篇好的文章: Guava Cache内存缓存使用实践-定时异步刷新及简单抽象封装 Google Guava 3-缓存 在原作者基础上,我做了 ...