最近做項目過程中因為Json文件名寫錯了一個字母Unity報錯,找錯誤找到半夜,當(dāng)時為了驗錯,寫了一個小Demo,正好借此總結(jié)一下Json.
1.什么是Json
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式罢低。它基于ECMAScript的一個子集问慎。 JSON采用完全獨立于語言的文本格式庸队,但是也使用了類似于C語言家族的習(xí)慣(包括C诫惭、C++、C#择吊、Java扰藕、JavaScript、Perl校摩、Python等)看峻。這些特性使JSON成為理想的數(shù)據(jù)交換語言。 易于人閱讀和編寫衙吩,同時也易于機器解析和生成(一般用于提升網(wǎng)絡(luò)傳輸速率)互妓。
2.JSON 語法規(guī)則
- 數(shù)據(jù)在鍵值對中
- 數(shù)據(jù)由逗號分隔
- 花括號保存對象
- 方括號保存數(shù)組
3.Json的結(jié)構(gòu)
- 對象:對象在js中表示為“{}”括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,...}的鍵值對的結(jié)構(gòu)坤塞,在面向?qū)ο蟮恼Z言中冯勉,key為對象的屬性,value為對應(yīng)的屬性值摹芙,所以很容易理解灼狰,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是 數(shù)字浮禾、字符串交胚、數(shù)組、對象幾種盈电。
- 數(shù)組:數(shù)組在js中是中括號“[]”括起來的內(nèi)容蝴簇,數(shù)據(jù)結(jié)構(gòu)為 ["java","javascript","vb",...],取值方式和所有語言中一樣匆帚,使用索引獲取熬词,字段值的類型可以是 數(shù)字、字符串吸重、數(shù)組互拾、對象幾種。
4.Json在Unity3d中的使用
JsonUtility:JsonUtility是Untiy5.3后新增的內(nèi)容,有時會出現(xiàn)莫名其妙的錯誤:
JsonUtility.FromJson():把json字符串轉(zhuǎn)成對象.
JsonUtility.ToJson():把對象轉(zhuǎn)成json字符串.-
** LitJson**:LitJson是一個Json的開源項目,這個比較穩(wěn)定,推薦使用:
JsonMapper.ToObject():把json字符串轉(zhuǎn)成對象.
JsonMapper.ToJson():把對象轉(zhuǎn)成json字符串.
官網(wǎng)下載:http://www.json.org/json-zh.html
1.png
放到Unity3d中的Plugin文件夾內(nèi)
2.png
使用的話要注意引入命名空間
5.上代碼:
純數(shù)組的Json數(shù)據(jù)比較簡單,在這個Demo中Json數(shù)據(jù)是一個對象,對象內(nèi)有一個數(shù)組.分別需要用到一個Json對象模型(JsonObjectModel)和一個Json數(shù)組模型(JsonArrayModel)來接收這兩種Json數(shù)據(jù):
- Json源文件
{
"infoList": [
{
"panelTypeString": "ItemMessage",
"path": "UIPanel/ItemMessagePanel"
},
{
"panelTypeString": "Knapsack",
"path": "UIPanel/KnapsackPanel"
},
{
"panelTypeString": "MainMenu",
"path": "UIPanel/MainMenuPanel"
},
{
"panelTypeString": "Shop",
"path": "UIPanel/ShopPanel"
},
{
"panelTypeString": "Skill",
"path": "UIPanel/SkillPanel"
},
{
"panelTypeString": "System",
"path": "UIPanel/SystemPanel"
},
{
"panelTypeString": "Task",
"path": "UIPanel/TaskPanel"
}
]
}
- JsonObjectModel:Json對象模型
public class JsonObjectModel
{
//JsonArrayModel類型的列表
public List<JsonArrayModel> infoList;
}
- JsonArrayModel:Json數(shù)組模型
public class JsonArrayModel
{
//對應(yīng)Json中屬性 名字要一樣
public string panelTypeString;
public string path;
}
- JsonDeserialize:Json解析程序,掛在場景中JsonManager上
public class JsonDeserialize : MonoBehaviour
{
void Start( )
{
//獲取Json文件
TextAsset jsonData = Resources.Load<TextAsset>("JsonData");
JsonObjectModel jsonObject = JsonMapper.ToObject<JsonObjectModel>(jsonData.text);
foreach (var info in jsonObject.infoList)
{
Debug.Log(info.panelTypeString+" "+info.path);
}
}
}
-
輸出結(jié)果:
5.png
6.Demo源代碼
鏈接:http://pan.baidu.com/s/1jHVP9m2 密碼:e9h8