- Unity版本:2018.4.17
- LitJson:幾乎適用於Unity所有版本 (下載地址)
JSON
是一種輕量級的文本數據格式,跟語言和平臺無關,在項目中使用非常廣泛。不過Unity引擎和C#語言本身並沒有針對JSON提供太方便的使用接口,幸好Unity插件商店裏可以找到很多。其中的LitJSON
就是一個流行的Unity插件,可以方便、快速地進行JSON和對象之間的轉換。
安裝
LitJSON
插件是一個Dll文件,在工程Assets下新建一個Plugins目錄,右鍵"Import New Asset"把LitJSON.dll
導入,然後在調用代碼處引入它的命名空間
using LitJSON;
即可開始使用了。
JSON和對象的轉換
LitJSON
有個JsonMapper
類,該類爲實現JSON -> 對象
和對象->JSON
的轉換提供了兩個主要方法,JsonMapper.ToObject
和JsonMapper.ToJson
。
JSON文件 -> 對象
例如,以下一個JSON文件,如何應用在項目中呢?
{
"Age" : 57,
"Name" : "iam bill"
}
自然地,我們會想到首先要加載該文件,並創建類對象,然後根據文件內容給對象賦值,之後該對象就可以使用了。
現在先把類定義出來,類名爲 Person
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
}
可以看到,類的成員和JSON內容一一對應,這樣才能互相轉換。
而JSON文件的加載,Unity引擎提供了 Resources.Load 方法。
假設該JSON文件名爲bill.json
,存放路徑爲 Assets/Resources/bill.json
,則加載且轉換爲Person對象的代碼如下。
// 讀取JSON文件並轉換成Person對象
// bill.json 文件放在 Assets/Resources 路徑下
void JsonFileToPerson()
{
TextAsset text = Resources.Load<TextAsset>("bill"); // 以文本方式加載
Person bill = JsonMapper.ToObject<Person>(text.text);
Debug.LogFormat("JsonFileToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
輸出Log如下
JsonFileToPerson: Age=57, Name=iam bill
JSON字符串 -> 對象
上一段講了如何把JSON文件轉換爲對象。那如果是一個字符串,如何轉換爲對象呢?示例代碼如下。
// 把JSON字符串轉換成Person對象
void JsonStrToPerson()
{
string jsonStr = @"
{
""Age"" : 57,
""Name"" : ""iam bill""
}";
Person bill = JsonMapper.ToObject<Person>(jsonStr);
Debug.LogFormat("JsonStrToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
輸出Log如下
JsonStrToPerson: Age=57, Name=iam bill
對象 -> JSON字符串
把對象轉換爲JSON字符串
// 把Person對象轉成JSON字符串
void PersonToJsonStr()
{
Person bill = new Person();
bill.Age = 57;
bill.Name = "iam bill";
string jsonStr = JsonMapper.ToJson(bill);
Debug.LogFormat("PersonToJsonStr: json={0}", jsonStr);
}
最後,本文的所有完整代碼如下:
using UnityEngine;
using LitJson;
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
}
public class TestJson : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
JsonStrToPerson();
JsonFileToPerson();
PersonToJsonStr();
}
// 把JSON字符串轉換成Person對象
void JsonStrToPerson()
{
string jsonStr = @"
{
""Age"" : 57,
""Name"" : ""iam bill""
}";
Person bill = JsonMapper.ToObject<Person>(jsonStr);
Debug.LogFormat("JsonStrToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
// 讀取JSON文件並轉換成Person對象
// bill.json 文件放在 Assets/Resources 路徑下
void JsonFileToPerson()
{
TextAsset text = Resources.Load<TextAsset>("bill");
Person bill = JsonMapper.ToObject<Person>(text.text);
Debug.LogFormat("JsonFileToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
// 把Person對象轉成JSON字符串
void PersonToJsonStr()
{
Person bill = new Person();
bill.Age = 57;
bill.Name = "iam bill";
string jsonStr = JsonMapper.ToJson(bill);
Debug.LogFormat("PersonToJsonStr: json={0}", jsonStr);
}
}