本文主要讲解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. Davinci 可视化系统部署安装及简单使用

    Davinci 是一个目前比较热门的国内开源BI系统,功能比较完善,各种可视化效果也挺不错.主要获取数据的方式是通过编写SQL 创建数据视图来展示各种图表的. Davinci面向业务人员/数据工程师/ ...

  2. 关于.NET微服务最热门的问题解答

    在我们最近让我们一起学习.NET的微服务专场活动中,我们收到了一些很好的问题.我们在现场已经回答很多问题,但我们想继续回答一些在会议中出现的最热门的问题.如果你错过了现场直播,不要担心,因为你可以按需 ...

  3. 【转载】Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解

    Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解 1清风揽月10人评论5006人阅读2017-06-21 15:48:43   博文说明[前言]: 本文 ...

  4. linux系统瓶颈分析(精) CPU Memory IO Network

    linux系统瓶颈分析(精) linux系统瓶颈分析(精) (2013-09-17 14:22:00)   分类: linux服务器瓶颈分析 1.0 性能监控介绍性能优化就是找到系统处理中的瓶颈以及去 ...

  5. 常用Python第三方库简介

    如果说强大的标准库奠定了Python发展的基石,丰富的第三方库则是python不断发展的保证,随着python的发展一些稳定的第三库被加入到了标准库里面,这里有6000多个第三方库的介绍 下表中加粗并 ...

  6. 第6讲 | 交换机与VLAN:办公室太复杂,我要回学校

    第6讲 | 交换机与VLAN:办公室太复杂,我要回学校 拓扑结构是怎么形成的? 一个交换机肯定不够用,需要多台交换机,交换机之间连接起来,就形成一个稍微复杂的拓扑结构. 如何解决常见的环路问题? 包转 ...

  7. Python+Selenium - 文件上传

    如下图,从系统点击上传功能,打开到这种如下图页面的才适合本文介绍的处理方法 处理方法一 pywinauto库 优点:可以选择多个文件,路径中有中文也支持 缺点:只能Windows平台使用 安装 pip ...

  8. 3D点云重建原理及Pytorch实现

    3D点云重建原理及Pytorch实现 Pytorch: Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruc ...

  9. Java IO学习笔记一:为什么带Buffer的比不带Buffer的快

    作者:Grey 原文地址:Java IO学习笔记一:为什么带Buffer的比不带Buffer的快 Java中为什么BufferedReader,BufferedWriter要比FileReader 和 ...

  10. 作为一名双非本科毕业的Java程序员,我该如何在日益严重的内卷化中避免被裁?

    前言 对一个 Java 程序员而言,并发编程能否熟练掌握是判断他是不是优秀的重要标准之一.因为并发编程在 Java 语言中最为晦涩的知识点,它涉及内存.CPU.操作系统.编程语言等多方面的基础能力,更 ...