JSON
是一种轻量级的文本数据格式,跟语言和平台无关,在项目中使用非常广泛。不过Unity引擎和C#语言本身并没有针对JSON提供太方便的使用接口,幸好Unity插件商店里可以找到很多。其中的LitJSON
就是一个流行的Unity插件,可以方便、快速地进行JSON和对象之间的转换。
LitJSON
插件是一个Dll文件,在工程Assets下新建一个Plugins目录,右键"Import New Asset"把LitJSON.dll
导入,然后在调用代码处引入它的命名空间
using LitJSON;
即可开始使用了。
LitJSON
有个JsonMapper
类,该类为实现JSON -> 对象
和对象->JSON
的转换提供了两个主要方法,JsonMapper.ToObject
和JsonMapper.ToJson
。
例如,以下一个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("bill"); // 以文本方式加载
Person bill = JsonMapper.ToObject(text.text);
Debug.LogFormat("JsonFileToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
输出Log如下
JsonFileToPerson: Age=57, Name=iam bill
上一段讲了如何把JSON文件转换为对象。那如果是一个字符串,如何转换为对象呢?示例代码如下。
// 把JSON字符串转换成Person对象
void JsonStrToPerson()
{
string jsonStr = @"
{
""Age"" : 57,
""Name"" : ""iam bill""
}";
Person bill = JsonMapper.ToObject(jsonStr);
Debug.LogFormat("JsonStrToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
输出Log如下
JsonStrToPerson: Age=57, Name=iam bill
把对象转换为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(jsonStr);
Debug.LogFormat("JsonStrToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
// 读取JSON文件并转换成Person对象
// bill.json 文件放在 Assets/Resources 路径下
void JsonFileToPerson()
{
TextAsset text = Resources.Load("bill");
Person bill = JsonMapper.ToObject(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);
}
}