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的编码和解析。