最近做項(xiàng)目過(guò)程中因?yàn)镴son文件名寫(xiě)錯(cuò)了一個(gè)字母Unity報(bào)錯(cuò),找錯(cuò)誤找到半夜,當(dāng)時(shí)為了驗(yàn)錯(cuò),寫(xiě)了一個(gè)小Demo,正好借此總結(jié)一下Json.
1.什么是Json
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于ECMAScript的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成(一般用于提升網(wǎng)絡(luò)傳輸速率)。
2.JSON 語(yǔ)法規(guī)則
- 數(shù)據(jù)在鍵值對(duì)中
- 數(shù)據(jù)由逗號(hào)分隔
- 花括號(hào)保存對(duì)象
- 方括號(hào)保存數(shù)組
3.Json的結(jié)構(gòu)
- 對(duì)象:對(duì)象在js中表示為“{}”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,...}的鍵值對(duì)的結(jié)構(gòu),在面向?qū)ο蟮恼Z(yǔ)言中,key為對(duì)象的屬性,value為對(duì)應(yīng)的屬性值,所以很容易理解,取值方法為 對(duì)象.key 獲取屬性值,這個(gè)屬性值的類(lèi)型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。
- 數(shù)組:數(shù)組在js中是中括號(hào)“[]”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 ["java","javascript","vb",...],取值方式和所有語(yǔ)言中一樣,使用索引獲取,字段值的類(lèi)型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。
4.Json在Unity3d中的使用
JsonUtility:JsonUtility是Untiy5.3后新增的內(nèi)容,有時(shí)會(huì)出現(xiàn)莫名其妙的錯(cuò)誤:
JsonUtility.FromJson():把json字符串轉(zhuǎn)成對(duì)象.
JsonUtility.ToJson():把對(duì)象轉(zhuǎn)成json字符串.-
** LitJson**:LitJson是一個(gè)Json的開(kāi)源項(xiàng)目,這個(gè)比較穩(wěn)定,推薦使用:
JsonMapper.ToObject():把json字符串轉(zhuǎn)成對(duì)象.
JsonMapper.ToJson():把對(duì)象轉(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ù)比較簡(jiǎn)單,在這個(gè)Demo中Json數(shù)據(jù)是一個(gè)對(duì)象,對(duì)象內(nèi)有一個(gè)數(shù)組.分別需要用到一個(gè)Json對(duì)象模型(JsonObjectModel)和一個(gè)Json數(shù)組模型(JsonArrayModel)來(lái)接收這兩種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對(duì)象模型
public class JsonObjectModel
{
//JsonArrayModel類(lèi)型的列表
public List<JsonArrayModel> infoList;
}
- JsonArrayModel:Json數(shù)組模型
public class JsonArrayModel
{
//對(duì)應(yīng)Json中屬性 名字要一樣
public string panelTypeString;
public string path;
}
- JsonDeserialize:Json解析程序,掛在場(chǎng)景中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


