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

 

posted @ 2019-03-08 20:07  NuLiAs  阅读(5024)  评论(0编辑  收藏  举报