JSON 介紹
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(網絡傳輸速度)。
Json語法
JSON 語法是 JavaScript 對象表示語法的子集。
數據在名稱/值對中
數據由逗號分隔
花括號保存對象
方括號保存數組
JSON 名稱/值對 JSON 數據的書寫格式是:名稱/值對。
名稱/值對組合中的名稱寫在前面(在雙引號中),值對寫在后面(同樣在雙引號中),中間用冒號隔開: "firstName":“Name" 這很容易理解,等價於這條 JavaScript 語句: firstName="Name"
LitJson介紹
LitJson是一個開源項目,比較小巧輕便,安裝也很簡單,在Unity里只需要把LitJson.dll放到Plugins文件夾下,並在代碼的最開頭添加 “Using LitJson”就可以了。簡單來說,LitJson的用途是實現Json和代碼數據之間的轉換,一般用於從服務器請求數據,得到返回的Json后進行轉換從而在代碼里可以訪問。

1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using LitJson; 5 6 public class JSONTest : MonoBehaviour 7 { 8 9 //使用JsonWriter創建Json 對象 10 private void JsonPright() 11 { 12 //{ "name":"張三","lv":1,"job":"法師","exp":1.1} 13 14 //1.創建json對象 15 JsonWriter writer = new JsonWriter(); 16 //開始寫入對象 17 writer.WriteObjectStart(); 18 //寫入鍵 19 writer.WritePropertyName("name"); 20 //寫入值 21 writer.Write("張三"); 22 //寫入鍵 23 writer.WritePropertyName("lv"); 24 //寫入值 25 writer.Write(1); 26 //結束寫入對象 27 writer.WriteObjectEnd(); 28 //print(writer); 29 30 } 31 32 //使用JsonData創建Json對象 33 private void JsonPright1() 34 { 35 //{ "name":"張三","lv":1,"job":"法師","exp":1.1} 36 JsonData data = new JsonData(); 37 data["name"] = "張三"; 38 data["lv"] = 1; 39 data["job"] = "法師"; 40 data["exp"] = 1.1; 41 string toJson = data.ToJson(); 42 print(toJson); 43 44 //LitJson解析Json對象 (往后需要用) 45 JsonData data1 = JsonMapper.ToObject(data.ToJson()); 46 name = data1["name"].ToString(); 47 int lv = int.Parse(data["lv"].ToString()); 48 string job = data["job"].ToString(); 49 float exp = float.Parse(data["exp"].ToString()); 50 51 } 52 53 //Json生成 解析練習 54 private void JsonPright2() 55 { 56 // { "name":"王五","lv":3,"job":"騎士","exp":3.3} 57 JsonData data = new JsonData(); 58 data["name"] = "王五"; 59 data["lv"] = "3"; 60 data["job"] = "騎士"; 61 data["exp"] = "3.3"; 62 63 string dataJson = data.ToJson(); 64 print(dataJson); 65 66 //解析對象 67 JsonData data1 = JsonMapper.ToObject(data.ToJson()); 68 name = data1["name"].ToString(); 69 int lv = int.Parse(data1["lv"].ToString()); 70 string job = data1["job"].ToString(); 71 float exp = float.Parse((data1["exp"].ToString())); 72 73 print(exp); 74 75 } 76 //生成復合json對象,並解析 77 private void JsonPright3() 78 { 79 // { "name":"李四","info":{ "lv":2,"job":"戰士","exp":2.2} } 80 JsonData data = new JsonData(); 81 data["name"] = "李四"; 82 data["info"] = new JsonData(); 83 data["info"]["lv"] = "2"; 84 data["info"]["job"] = "戰士"; 85 data["info"]["exp"] = "2.2"; 86 string json = data.ToJson(); 87 print(json); 88 89 //解析復合對象 90 JsonData data1 = JsonMapper.ToObject(data.ToJson()); 91 name = data1["name"].ToString(); 92 int lv = int.Parse(data1["info"]["lv"].ToString()); 93 string job = data1["info"]["job"].ToString(); 94 string exp = data1["info"]["exp"].ToString(); 95 print(job); 96 97 } 98 //使用JsonData 創建數組對象 99 private void JsonPrightArr() 100 { 101 //["張三",1,"法師",1.1] 102 JsonWriter writer = new JsonWriter(); 103 writer.WriteArrayStart(); 104 writer.Write("張三"); 105 writer.Write(1); 106 writer.Write("法師"); 107 writer.Write(1.1); 108 writer.WriteArrayEnd(); 109 110 print(writer); 111 } 112 //使用Writer 創建數組對象 113 private void JsonPrightArr1() 114 { 115 //[{"name":"張三","lv":1,"job":"法師","exp":1.1},{"name":"李四","lv":2,"job":"戰士","exp":2.2}] 116 JsonWriter writer = new JsonWriter(); 117 writer.WriteArrayStart(); 118 writer.WriteObjectStart(); 119 writer.WritePropertyName("name"); 120 writer.Write("張三"); 121 writer.WritePropertyName("lv"); 122 writer.Write("1"); 123 writer.WritePropertyName("job"); 124 writer.Write("法師"); 125 writer.WritePropertyName("exp"); 126 writer.Write("1.1"); 127 writer.WriteObjectEnd(); 128 129 writer.WriteObjectStart(); 130 writer.WritePropertyName("name"); 131 writer.Write("李四"); 132 writer.WritePropertyName("lv"); 133 writer.Write("2"); 134 writer.WritePropertyName("job"); 135 writer.Write("戰士"); 136 writer.WritePropertyName("exp"); 137 writer.Write("1.5"); 138 writer.WriteObjectEnd(); 139 140 writer.WriteArrayEnd(); 141 print(writer); 142 } 143 //使用JsonWriter 創建Json數組對象 144 private void JsonPrightArr2() 145 { 146 //[{"name":"李四","info":{"lv":2,"job":"戰士","exp":2.2}}] 147 JsonWriter writer = new JsonWriter(); 148 writer.WriteArrayStart(); 149 writer.WriteObjectStart(); 150 writer.WritePropertyName("name"); 151 writer.Write("李四"); 152 writer.WritePropertyName("info"); 153 154 writer.WriteObjectStart(); 155 writer.WritePropertyName("lv"); 156 writer.Write("2"); 157 writer.WritePropertyName("job"); 158 writer.Write("戰士"); 159 writer.WritePropertyName("exp"); 160 writer.Write("2.2"); 161 writer.WriteObjectEnd(); 162 163 164 writer.WriteObjectEnd(); 165 writer.WriteArrayEnd(); 166 167 print(writer); 168 } 169 //使用JsonData 創建數組Json對象 170 private void JsonPirghtArr3() 171 { 172 //[{"name":"李四","info":{"lv":2,"job":"戰士","exp":2.2}}] 173 JsonData data = new JsonData(); 174 data["name"] = "李四"; 175 data["info"] = new JsonData(); 176 data["info"]["lv"] = "2"; 177 data["info"]["job"] = "戰士"; 178 data["info"]["exp"] = "2.2"; 179 180 JsonData jd = new JsonData(); 181 jd.Add(data.ToJson()); 182 183 print(jd.ToJson()); 184 185 ////解析數組 尚未完成 報錯 186 //JsonData data1 = JsonMapper.ToObject(); 187 //name = data1[0]["name"].ToString(); 188 //int lv = int.Parse(data1[0]["lv"].ToString()); 189 //string job = data1[1]["job"].ToString(); 190 //string exp = data1[1]["exp"].ToString(); 191 192 //print(exp); 193 194 } 195 196 private void OnGUI() 197 { 198 if (GUILayout.Button("使用JsonWriter創建Json 對象")) 199 { 200 JsonPright(); 201 } 202 if (GUILayout.Button("使用JsonData創建Json對象")) 203 { 204 JsonPright1(); 205 } 206 if (GUILayout.Button("Json生成 解析練習")) 207 { 208 JsonPright2(); 209 } 210 if (GUILayout.Button("生成復合json對象,並解析")) 211 { 212 JsonPright3(); 213 } 214 if (GUILayout.Button("使用JsonData 創建數組對象")) 215 { 216 JsonPrightArr(); 217 } 218 if (GUILayout.Button("使用Writer 創建數組對象")) 219 { 220 JsonPrightArr1(); 221 } 222 if (GUILayout.Button("使用JsonWriter 創建Json數組對象")) 223 { 224 JsonPrightArr2(); 225 } 226 if (GUILayout.Button("使用JsonData 創建數組Json對象")) 227 { 228 JsonPirghtArr3(); 229 } 230 231 } 232 }
JsonWriter這種方式非常不方便,不建議使用。
在使用LitJson中,建議使用JsonData,JsonMapper來處理Json的編碼和解析。