Unity讀取和解析JSON文件(1)-JSON和對象的轉換

  • 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.ToObjectJsonMapper.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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章