C#使用LitJson對Json數據解析


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 }
CreateJson

JsonWriter這種方式非常不方便,不建議使用。

在使用LitJson中,建議使用JsonData,JsonMapper來處理Json的編碼和解析。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM