本文章由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了.
在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————————–
若有問題,請隨時聯系!!
非常感謝!!!
- 前言
- Unity隨機Prefab,自動前往某點處理
- Unity導入FBX自動進行動畫切分
- Unity5中的粒子縮放(附測試源碼)
- Unity和虛幻的比較
- Unity 實現Log實時輸出到屏幕或控制臺上&lt;一&gt;
- Unity 實現Log實時輸出到屏幕或控制臺上&lt;二&gt;
- Unity的Json解析<一>--讀取Json文件
- Unity的Json解析<二>–寫Json文件
- Unity 的OCulus VR開發遇到的坑---OC版本差異
- Unity中一鍵創建常用文件夾
- Unity版本與虛擬現實頭盔Deepoon大朋版本測試
- Unity 多場景打包
- Untiy中的數據平滑處理
- Unity中SendMessage和Delegate效率比較