Unity的Json解析<二>–写Json文件

最后更新于:2022-04-01 09:50:09

本文章由cartzhang编写,转载请注明出处。 所有权利保留。 文章链接:[http://blog.csdn.net/cartzhang/article/details/50378805](http://blog.csdn.net/cartzhang/article/details/50378805) 作者:cartzhang ### Unity的Json解析<二>–写Json文件 上篇做了对Json格式文件读操作, 链接地址:[http://blog.csdn.net/cartzhang/article/details/50373558](http://blog.csdn.net/cartzhang/article/details/50373558) 本章对Json的写文件,做个处理. 写文件也非常简单,把大象装冰箱一样,分三步, 创建文件, 把内容写入文件, 然后关闭文件. ### 内容 我们要处理的是所写的内容,我们打算写什么都Json文件中呢? 我们打算把昨天的格式继续利用,还记得GameStatus ,这个是我修改的.不过,还算好用啊. GameStatus.cs文件代码如下: ~~~ using UnityEngine; using System; using System.Collections; [Serializable] public class GameStatus { public string gameName; public string version; public bool isStereo; public bool isUseHardWare; public refencenes[] statusList; } [Serializable] public class refencenes { public refencenes() { name = ""; id = -1; } public string name; public int id; } ~~~ ### 写Json格式 写JSon格式呢,我看网上都用的BinaryFormatter来处理,但是我发现这个跟昨天的问题类型,要是用BinaryFormatter的话,等保存好的Json文本打开后,各种空格,NULL和乱码.这个主要是编码格式的问题. 所以,我拒绝使用它了. 我使用**File**,直接WriteALLText来处理. 代码如下: ~~~ public void SaveJson() { string json = JsonUtility.ToJson(gameStatus); string savePath = Application.dataPath + "/Resources/Test01.json"; File.WriteAllText(savePath, json, Encoding.UTF8); Debug.Log("save:::" + savePath); } ~~~ 这样就完成了写文件是否很简便呢??!!! ### 写Json的完整代码 完整代码如下: ~~~ using UnityEngine; using System.Collections; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Text; public class WriteJson : MonoBehaviour { public GameStatus gameStatus; public GameObject[] objects; void Start() { gameStatus = new GameStatus(); gameStatus.statusList = new refencenes[objects.Length]; gameStatus.gameName = "JSON Write Test"; for (int i = 0; i < objects.Length; i++) { gameStatus.statusList[i] = new refencenes(); gameStatus.statusList[i].id = i; gameStatus.statusList[i].name = objects[i].name; } } public void SaveJson() { string json = JsonUtility.ToJson(gameStatus); string savePath = Application.dataPath + "/Resources/Test01.json"; File.WriteAllText(savePath, json, Encoding.UTF8); Debug.Log("save:::" + savePath); } } ~~~ ### 怎么使用? 我建立了一个测试工程. 只能如图了: ![Json读](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-09_56dfda86b9659.jpg "") 你依然可以看到昨天写文件的痕迹. 当然我们只关注写Json了. 在writeJson的属性面板上,可看到,给它的Objects拖拽了一个cube,一个Capsule,作为保存到JSon文件中的内容的一部分. 然后在运行Unity 编辑器时,按下”S”,保存键,就会在当前工程下的\Assets\Resources\中,产生了一个Test01.json的文件,这个代码中可以看到的,你可随意修改. ### 结果 让我们来看看我们都保持都Json文件中了什么东西. ~~~ {"gameName":"JSON Write Test","version":"","isStereo":true,"isUseHardWare":false,"statusList":[{"name":"Cube","id":0},{"name":"Capsule","id":1}]} ~~~ 这就是你所保存的Json文件中的内容. 我打算上传都github,但是现在我github一直让更新,更新不成功,打不开啊! ### 留下地方吧!! github一大早来更新,终于更新成功。 所以,源码地址:[https://github.com/cartzhang/UnityJsonTest](https://github.com/cartzhang/UnityJsonTest) 快捷到达源码:[Unity Json Test for 5.3 ](https://github.com/cartzhang/UnityJsonTest) 至此,Json文件的读写都搞定了. ### 更多 关于Json文件的使用,我打算尝试一个,能不能做个更好的配置,比如控制游戏的场景配置和游戏流程.打包后面不用修改,直接修改json 就可以创建一个完全不一样的游戏了. 这样,是不是比较蠢呢!!可能会,比较复杂吧!! 只个想法,若有兴趣,看看能不能实现一下. ———THE—–END————————– 若有问题,请随时联系!! 非常感谢!!!
';