# 相关链接
- dll 文件,点击即下载
- LitJson 官网
# 声明命名空间
pps: 直接将 .dll
文件拖入 Unity 的 Assets 目录中便可以使用了
# 转换
- 实例转换为 JSON
p | public class Pet { |
| public string name; |
| public int age; |
| string color; |
| public void Bark () {} |
| } |
| |
| |
| using LitJson; |
| ... |
| JsonMapper.ToJson(new Pet()); |
| |
PS: 实例方法和未公开的属性不会被转化
- 嵌套实例对象转换为 JSON
p | public class PetColor { |
| public int r; |
| public int g; |
| public int b; |
| } |
| |
| public class Pet { |
| public string name; |
| public int age; |
| public PetColor color; |
| } |
p | var petA = new Pet(); |
| petA.name = "Leokk"; |
| petA.age = 12; |
| petA.color = new PetColor(); |
| JsonMapper.ToJson(petA); |
| |
| |
- 常用类型转 JSON
交错数组转 JSON
p | var array = new string[][] { |
| new string[]{ "bar", "foo" }, |
| new string[]{ "baz" } |
| }; |
| JsonMapper.ToJson(array); |
| |
二维数组转 JSON
p | var array = new int[,] { |
| { 1, 2, 3 }, { 55, 56, 57 } |
| }; |
| JsonMapper.ToJson(array); |
| |
列表转 JSON
p | var list = new List<bool>(new bool[]{ true, false }); |
| JsonMapper.ToJson(list); |
| |
- JSON 字符串转为特定类的实例
p | class Pet { |
| public string name; |
| public int age; |
| } |
| |
| var b = "{ 'name': 'Misha', 'age': 3 }"; |
| var petB = JsonMapper.ToObject<Pet>(b); |
| |
为静态方法 JsonMapper.ToObject 指定泛型即可。注意属性要一一对应。
- 使用泛型将 JSON 转为常用的类型
p | string arrayStr = "[1, 2, 3, 11, 12, 13]"; |
| JsonMapper.ToObject<int[]>(arrayStr)[3]; |
| |
p | var arrayStr = "[['foo', 'baz'], ['bar']]"; |
| var array = JsonMapper.ToObject<string[][]>(arrayStr); |
| array[1][0]; |
| |
ps: 使用泛型时 ToObject
的参数只能为字符串形式,而不能以 JsonData 类型的变量作为参数
不能将 List<int[]>
转换为交错数组
# 创建 JsonData 实例
- 创建字典型实例
p | var petC = new JsonData(); |
| |
| petC["name"] = "Huffer"; |
| petC["age"] = 4; |
| |
| petC.ToJson(); |
| |
- 创建数组型实例,使用了实例方法
Add
p | var rexxarsPets = new JsonData(); |
| |
| rexxarsPets.Add(petCA); |
| rexxarsPets.Add(petCB); |
| rexxarsPets.Add(petC); |
| |
| rexxarsPets.ToJson(); |
| |
| |
| "[ |
| { 'name': 'Leokk', 'age': 2 }, |
| { 'name': 'Misha', 'age': 3 }, |
| { 'name': 'Huffer', 'age': 4 } |
| ]" |
| */ |
一旦将 JsonData 实例使用上述一种方式向内部添加元素之后,便不能再使用另一种方法进行添加了,即使使用下面的方法清空了实例也不行。
# 循环
- 使用属性
Count
配合 for
关键字循环,可以用来循环像数组结构的 JsonData 实例。
p | string nameArrayString = "['Leokk', 'Misha']"; |
| JsonData nameArray = JsonMapper.ToObject(nameArrayString); |
| |
| for (int i = 0; i < nameArray.Count; i++) { |
| (string)nameArray[i]; |
| } |
| |
| |
也可以用来循环正常的 JsonData 实例。
p | for (int i = 0; i < petA.Count; i++) { |
| |
| JsonData item = jsonDataA[i]; |
| |
| if (item.IsString) |
| Debug.Log((string)item); |
| else if (item.isInt) |
| Debug.Log((int)item) |
| } |
| |
| |
实例自带一些布尔类型的属性,用来判断当前键值的类型
IsArray
, IsBoolean
, IsDouble
, IsInt
, IsLong
, IsObject
, IsString
- 使用属性
Keys
配合 foreach
关键字进行循环,JsonData 实现了 IDictionary
接口。此方法不能循环数组形式的 JsonData 实例。
p | foreach (string key in jsonDataA.Keys) { |
| key; |
| (string)jsonDataA[key]; |
| jsonDataA[key].ToJson(); |
| } |
| |
| |
在第二次循环中,试图将数字 2 强制转换为 string
所以会报错。
# 访问属性
- JSON 字符串转换为 JsonData 实例
p | petA["name"]; |
| |
| petA["name"].ToJson(); |
| petA["age"].ToJson(); |
| |
| (string)jsonDataA["name"]; |
| (int)jsonDataA["age"] |
- JsonData / 类实例转换为 JSON 字符串
p | string reloadA = JsonMapper.ToJson(jsonDataA); |
| string reloadA = jsonDataA.ToJson(); |
| |
| |
| |
| string reoloadB = JsonMapper.ToJson(petB); |
| |
| |
这里需要注意一点,JsonData 实例自带 ToJson
方法将自身转为字符串。静态方法 JsonMapper.ToJson
主要用于将其他的类实例(如: petB
)转化为 JSON 字符串.
# 清空
实例方法 .Clear
用于清空实例内部全部属性。返回 []
或 {}
。暂没发现有删除单个属性的方法。
# 最后
命名空间中还有 JsonReader
, JsonWriter
类,用法参考链接 是 ToJson, ToObject 的具体实现方法。