
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后进行转换从而在代码里可以访问。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson; public class JSONTest : MonoBehaviour
{ //使用JsonWriter创建Json 对象
private void JsonPright()
{
//{ "name":"张三","lv":1,"job":"法师","exp":1.1} //1.创建json对象
JsonWriter writer = new JsonWriter();
//开始写入对象
writer.WriteObjectStart();
//写入键
writer.WritePropertyName("name");
//写入值
writer.Write("张三");
//写入键
writer.WritePropertyName("lv");
//写入值
writer.Write();
//结束写入对象
writer.WriteObjectEnd();
//print(writer); } //使用JsonData创建Json对象
private void JsonPright1()
{
//{ "name":"张三","lv":1,"job":"法师","exp":1.1}
JsonData data = new JsonData();
data["name"] = "张三";
data["lv"] = ;
data["job"] = "法师";
data["exp"] = 1.1;
string toJson = data.ToJson();
print(toJson); //LitJson解析Json对象 (往后需要用)
JsonData data1 = JsonMapper.ToObject(data.ToJson());
name = data1["name"].ToString();
int lv = int.Parse(data["lv"].ToString());
string job = data["job"].ToString();
float exp = float.Parse(data["exp"].ToString()); } //Json生成 解析练习
private void JsonPright2()
{
// { "name":"王五","lv":3,"job":"骑士","exp":3.3}
JsonData data = new JsonData();
data["name"] = "王五";
data["lv"] = "";
data["job"] = "骑士";
data["exp"] = "3.3"; string dataJson = data.ToJson();
print(dataJson); //解析对象
JsonData data1 = JsonMapper.ToObject(data.ToJson());
name = data1["name"].ToString();
int lv = int.Parse(data1["lv"].ToString());
string job = data1["job"].ToString();
float exp = float.Parse((data1["exp"].ToString())); print(exp); }
//生成复合json对象,并解析
private void JsonPright3()
{
// { "name":"李四","info":{ "lv":2,"job":"战士","exp":2.2} }
JsonData data = new JsonData();
data["name"] = "李四";
data["info"] = new JsonData();
data["info"]["lv"] = "";
data["info"]["job"] = "战士";
data["info"]["exp"] = "2.2";
string json = data.ToJson();
print(json); //解析复合对象
JsonData data1 = JsonMapper.ToObject(data.ToJson());
name = data1["name"].ToString();
int lv = int.Parse(data1["info"]["lv"].ToString());
string job = data1["info"]["job"].ToString();
string exp = data1["info"]["exp"].ToString();
print(job); }
//使用JsonData 创建数组对象
private void JsonPrightArr()
{
//["张三",1,"法师",1.1]
JsonWriter writer = new JsonWriter();
writer.WriteArrayStart();
writer.Write("张三");
writer.Write();
writer.Write("法师");
writer.Write(1.1);
writer.WriteArrayEnd(); print(writer);
}
//使用Writer 创建数组对象
private void JsonPrightArr1()
{
//[{"name":"张三","lv":1,"job":"法师","exp":1.1},{"name":"李四","lv":2,"job":"战士","exp":2.2}]
JsonWriter writer = new JsonWriter();
writer.WriteArrayStart();
writer.WriteObjectStart();
writer.WritePropertyName("name");
writer.Write("张三");
writer.WritePropertyName("lv");
writer.Write("");
writer.WritePropertyName("job");
writer.Write("法师");
writer.WritePropertyName("exp");
writer.Write("1.1");
writer.WriteObjectEnd(); writer.WriteObjectStart();
writer.WritePropertyName("name");
writer.Write("李四");
writer.WritePropertyName("lv");
writer.Write("");
writer.WritePropertyName("job");
writer.Write("战士");
writer.WritePropertyName("exp");
writer.Write("1.5");
writer.WriteObjectEnd(); writer.WriteArrayEnd();
print(writer);
}
//使用JsonWriter 创建Json数组对象
private void JsonPrightArr2()
{
//[{"name":"李四","info":{"lv":2,"job":"战士","exp":2.2}}]
JsonWriter writer = new JsonWriter();
writer.WriteArrayStart();
writer.WriteObjectStart();
writer.WritePropertyName("name");
writer.Write("李四");
writer.WritePropertyName("info"); writer.WriteObjectStart();
writer.WritePropertyName("lv");
writer.Write("");
writer.WritePropertyName("job");
writer.Write("战士");
writer.WritePropertyName("exp");
writer.Write("2.2");
writer.WriteObjectEnd(); writer.WriteObjectEnd();
writer.WriteArrayEnd(); print(writer);
}
//使用JsonData 创建数组Json对象
private void JsonPirghtArr3()
{
//[{"name":"李四","info":{"lv":2,"job":"战士","exp":2.2}}]
JsonData data = new JsonData();
data["name"] = "李四";
data["info"] = new JsonData();
data["info"]["lv"] = "";
data["info"]["job"] = "战士";
data["info"]["exp"] = "2.2"; JsonData jd = new JsonData();
jd.Add(data.ToJson()); print(jd.ToJson()); ////解析数组 尚未完成 报错
//JsonData data1 = JsonMapper.ToObject();
//name = data1[0]["name"].ToString();
//int lv = int.Parse(data1[0]["lv"].ToString());
//string job = data1[1]["job"].ToString();
//string exp = data1[1]["exp"].ToString(); //print(exp); } private void OnGUI()
{
if (GUILayout.Button("使用JsonWriter创建Json 对象"))
{
JsonPright();
}
if (GUILayout.Button("使用JsonData创建Json对象"))
{
JsonPright1();
}
if (GUILayout.Button("Json生成 解析练习"))
{
JsonPright2();
}
if (GUILayout.Button("生成复合json对象,并解析"))
{
JsonPright3();
}
if (GUILayout.Button("使用JsonData 创建数组对象"))
{
JsonPrightArr();
}
if (GUILayout.Button("使用Writer 创建数组对象"))
{
JsonPrightArr1();
}
if (GUILayout.Button("使用JsonWriter 创建Json数组对象"))
{
JsonPrightArr2();
}
if (GUILayout.Button("使用JsonData 创建数组Json对象"))
{
JsonPirghtArr3();
} }
}
CreateJson
JsonWriter这种方式非常不方便,不建议使用。
在使用LitJson中,建议使用JsonData,JsonMapper来处理Json的编码和解析。