相關(guān)鏈接
聲明命名空間
using LitJson;
ps: 直接將 .dll 文件拖入 Unity 的 Assets 目錄中便可以使用了
轉(zhuǎn)換
- 實例轉(zhuǎn)換為JSON
public class Pet {
public string name;
public int age;
string color;
public void Bark () {/***/}
}
using LitJson;
...
JsonMapper.ToJson(new Pet());
// => string: "{ 'name': null, 'age': 0 }"
PS: 實例方法和未公開的屬性不會被轉(zhuǎn)化
- 嵌套實例對象轉(zhuǎn)換為JSON
public class PetColor {
public int r;
public int g;
public int b;
}
public class Pet {
public string name;
public int age;
public PetColor color;
}
var petA = new Pet();
petA.name = "Leokk";
petA.age = 12;
petA.color = new PetColor();
JsonMapper.ToJson(petA);
// => string:
// "{'name':'Leokk', 'age':12, 'color': {'r':0, 'g':0, 'a':0}}"
- 常用類型轉(zhuǎn)JSON
交錯數(shù)組轉(zhuǎn)JSON
var array = new string[][] {
new string[]{ "bar", "foo" },
new string[]{ "baz" }
};
JsonMapper.ToJson(array);
// => string: "[["bar","foo"],["baz"]]"
二維數(shù)組轉(zhuǎn)JSON
var array = new int[,] {
{ 1, 2, 3 }, { 55, 56, 57 }
};
JsonMapper.ToJson(array);
// => string: "[1, 2, 3, 55, 56, 57]"
列表轉(zhuǎn)JSON
var list = new List<bool>(new bool[]{ true, false });
JsonMapper.ToJson(list);
// => string: "[true, false]"
- JSON 字符串轉(zhuǎn)為特定類的實例
class Pet {
public string name;
public int age;
}
var b = "{ 'name': 'Misha', 'age': 3 }";
var petB = JsonMapper.ToObject<Pet>(b);
// => Pet: { name: "Misha", age: 3 }
為靜態(tài)方法 JsonMapper.ToObject 指定泛型即可。注意屬性要一一對應(yīng)。
- 使用泛型將JSON 轉(zhuǎn)為常用的類型
string arrayStr = "[1, 2, 3, 11, 12, 13]";
JsonMapper.ToObject<int[]>(arrayStr)[3];
// => int: 11
var arrayStr = "[['foo', 'baz'], ['bar']]";
var array = JsonMapper.ToObject<string[][]>(arrayStr);
array[1][0];
// => string: "bar"
ps: 使用泛型時 ToObject 的參數(shù)只能為字符串形式,而不能以JsonData 類型的變量作為參數(shù)
不能將 List<int[]> 轉(zhuǎn)換為交錯數(shù)組
創(chuàng)建 JsonData 實例
- 創(chuàng)建字典型實例
var petC = new JsonData();
petC["name"] = "Huffer";
petC["age"] = 4;
petC.ToJson();
// => string: "{ 'name': 'Huffer', 'age': 4 }"
- 創(chuàng)建數(shù)組型實例,使用了實例方法
Add
var rexxarsPets = new JsonData();
rexxarsPets.Add(petCA);
rexxarsPets.Add(petCB);
rexxarsPets.Add(petC);
rexxarsPets.ToJson();
/* => string:
"[
{ 'name': 'Leokk', 'age': 2 },
{ 'name': 'Misha', 'age': 3 },
{ 'name': 'Huffer', 'age': 4 }
]"
*/
一旦將 JsonData 實例使用上述一種方式向內(nèi)部添加元素之后,便不能再使用另一種方法進行添加了,即使使用下面的方法清空了實例也不行。
循環(huán)
- 使用屬性
Count配合for關(guān)鍵字循環(huán),可以用來循環(huán)像數(shù)組結(jié)構(gòu)的 JsonData 實例。
string nameArrayString = "['Leokk', 'Misha']";
JsonData nameArray = JsonMapper.ToObject(nameArrayString);
for (int i = 0; i < nameArray.Count; i++) {
(string)nameArray[i];
}
// "Leokk"
// "Misha"
也可以用來循環(huán)正常的 JsonData 實例。
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)
}
// "Leokk"
// 2
實例自帶一些布爾類型的屬性,用來判斷當前鍵值的類型
IsArray,IsBoolean,IsDouble,IsInt,IsLong,IsObject,IsString
- 使用屬性
Keys配合foreach關(guān)鍵字進行循環(huán),JsonData 實現(xiàn)了IDictionary接口。此方法不能循環(huán)數(shù)組形式的 JsonData 實例。
foreach (string key in jsonDataA.Keys) {
key;
(string)jsonDataA[key];
jsonDataA[key].ToJson();
}
// "name" "Leokk" "Leokk"
// "age" Error int 不能轉(zhuǎn)為 string "2"
在第二次循環(huán)中,試圖將數(shù)字 2 強制轉(zhuǎn)換為 string 所以會報錯。
訪問屬性
- JSON 字符串轉(zhuǎn)換為 JsonData 實例
petA["name"]; // JsonData 類型 Leokk
petA["name"].ToJson(); // "Leokk"
petA["age"].ToJson(); // "2"
(string)jsonDataA["name"]; // "Leokk"
(int)jsonDataA["age"] // 2
- JsonData / 類實例轉(zhuǎn)換為 JSON 字符串
string reloadA = JsonMapper.ToJson(jsonDataA);
string reloadA = jsonDataA.ToJson();
// "{ 'name': 'Leokk', 'age': 2 }"
string reoloadB = JsonMapper.ToJson(petB);
// "{ 'name': 'Misha', 'age': 3 }"
這里需要注意一點,JsonData 實例自帶 ToJson 方法將自身轉(zhuǎn)為字符串。靜態(tài)方法 JsonMapper.ToJson 主要用于將其他的類實例(如:petB)轉(zhuǎn)化為 JSON 字符串.
清空
實例方法 .Clear 用于清空實例內(nèi)部全部屬性。返回 [] 或 {}。暫沒發(fā)現(xiàn)有刪除單個屬性的方法。
最后
命名空間中還有 JsonReader,JsonWriter 類,用法參考鏈接 是ToJson, ToObject 的具體實現(xiàn)方法。