Unity實用功能之讀寫Json文件

這是我參與8月更文挑戰的第4天,活動詳情查看:8月更文挑戰web

概述

Json是一種輕量級的文本數據格式,在項目中使用很是普遍。在Unity開發過程當中一般用於通信時的數據交互,以及配置文件的讀寫等操做。本篇文章主要介紹一下什麼是Json以及其在unity中的簡單應用。編程

Json介紹

JSON是JavaScript Object Notation的簡稱,它是一種數據交換的文本格式。它基於 ECMAScript (w3c制定的js規範)的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。json

Json的特色

Json 主要具備如下特性,這些特性使它成爲理想的數據交換語言:markdown

  • Json 是輕量級的文本數據交換格式
  • Json 具備自我描述性,更易理解
  • Json 採用徹底獨立於語言的文本格式:Json 使用 JavaScript 語法來描述數據對象,可是 Json 仍然獨立於語言和平臺。Json 解析器和 Json 庫支持許多不一樣的編程語言。 目前常見的動態編程語言(PHP,JSP,.NET)都支持Json。

Json 是存儲和交換文本信息的一種語法,它與XML具備相同的特性,是一種數據存儲格式,卻比 XML 更小、更快、 更易於人編寫和閱讀、更易於生成和解析。網絡

在Unity中使用JSON

在Unity中,Json是最經常使用的一種文件格式,不過Unity引擎和C#語言自己並無針對Json提供太方便的使用接口,常被人們所熟知LitJson就是一個流行的Unity插件,能夠方便、快速地進行Json和對象之間的轉換。app

LitJson插件是一個Dll文件,在工程Assets下新建一個Plugins目錄,把LitJson.dll導入其中,而後在調用代碼處引入它的命名空間既可使用了編程語言

using LitJson;;post

將string類型的Json串轉成Json數據並解析

在開發過程當中常常會使用Json串發送數據,而這些數據發送完以後可能會變成string類型,這時,咱們須要將其轉換爲Json數據並進行解析。好比如今有這麼一串數據this

string data = "{\"姓名\":\"張三\",\"學號\":\"20210101\",\"班級\":\"三年一班\",\"年齡\":\"22\"}";"\"爲轉義字符spa

如今要在Unity中將其轉換爲Json數據並解析。 首先定義一個類來存儲信息

public class StudentInfo
{
    public string Name { get; set; }//姓名
    public string Number { get; set; }//學號
    public string Class { get; set; }//班級
    public int Age { get; set; }//年齡

    public void Info(string name, string number, string _class, string age)
    {
        this.Name = name;
        this.Number = number;
        this.Class = _class;
        this.Age = int.Parse(age);
    }
}

複製代碼

接下來咱們就須要引用LitJson解析數據了

JsonData jsonData = JsonMapper.ToObject(data);//將string轉成Json形式
StudentInfo studentInfo = new StudentInfo();//new 一個學生信息類
studentInfo.Info(jsonData["姓名"].ToString(), jsonData["學號"].ToString(), jsonData["班級"].ToString(), jsonData["年齡"].ToString());//傳入參數
Debug.Log(studentInfo.Name + "," + studentInfo.Number + "," + studentInfo.Class + "," + studentInfo.Age);
複製代碼

這樣就能夠將數據解析出來了 在Unity中運行結果爲

image.png

讀取json文件

這個其實和上述方法差不太多,只是先讀取json數據,轉換成數據流,而後再轉換成json數據,而後在解析就OK了。
首選判斷文件是否存在,而後在進行讀取

string path = Application.streamingAssetsPath +"/Config/JsonModel.json";
if(!File.Exists(path))
{
    return;
}
StreamReader streamreader =new StreamReader(Application.streamingAssetsPath +"/Config/JsonModel.json");//讀取數據,轉換成數據流
複製代碼

在以後將數據轉換而後向上述方法同樣解析

JsonReader js =new JsonReader(streamreader);//再轉換成json數據
studentInfo = JsonMapper.ToObject<StudentInfo>(js);//讀取
//釋放資源
streamreader.Close();
streamreader.Dispose();
複製代碼

寫入Json(新建或更新)

首先讀取本地文件,查看是否存在,而後在進行操做 先定義一個class類

public class StudentList
{ 
    public Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
}
複製代碼

而後獲取路徑

string path = Application.streamingAssetsPath +"/Config/JsonModel.json";
複製代碼

經過File.Exists(filePath)判斷文件是否存在。
若存在更新鍵值對,不存在則建立鍵值對

public StudentList studentList = new StudentList();
複製代碼
if (!File.Exists(filePath)) //不存在就建立鍵值對 
{ 
    studentList.dictionary.Add("Name", studentInfo.Name); 
    studentList.dictionary.Add("Number", studentInfo.Number); 
    studentList.dictionary.Add("Class", studentInfo.Class); 
    studentList.dictionary.Add("Age", studentInfo.Age.ToString()); 
} 
else //若存在就更新值 
{ 
    studentList.dictionary["Name"] = studentInfo.Name; 
    studentList.dictionary["Number"] = studentInfo.Number; 
    studentList.dictionary["Class"] = studentInfo.Class; 
    studentList.dictionary["Age"] = studentInfo.Age.ToString(); 
}
複製代碼

而後進行數據保存

//找到當前路徑 
FileInfo file = new FileInfo(filePath); 
//判斷有沒有文件,有則打開文件,沒有建立後打開文件 
StreamWriter sw = file.CreateText(); 
//ToJson接口將你的列表類傳進去,並自動轉換爲string類型 
string json = JsonMapper.ToJson(studentList.dictionary); 
//將轉換好的字符串存進文件 
sw.WriteLine(json); 
//注意釋放資源 
sw.Close(); 
sw.Dispose(); 
//刷新資源
AssetDatabase.Refresh();
複製代碼

到這裏Json文件也就寫入完畢。

寫在最後

全部分享的內容均爲做者在平常開發過程當中使用過的各類小功能點,分享出來也變相的回顧一下,若有寫的很差的地方還請多多指教。Demo源碼會在以後整理好以後分享給你們。

相關文章
相關標籤/搜索