存储和交换文本信息的语法。
JavaScript对象表示法
LitJson
LitJSON is a small and fast library for handling data in the JSON format. It is written in C# and is compatible with all .Net languages.
JSON是一个简单的,但功能强大的序列化数据格式。它定义了简单的类型,如布尔,数(int和float)和字符串,和几个数据结构:List和Dictionnary。
LitJson是用C #编写的,它的目的是要小,快速,易用。它使用了Mono框架。
语法
JSON 语法是JavaScript对象表示法语法的子集。
• 数据由逗号分隔
• 花括号保存对象
• 方括号保存数组
值的类型可以是:
public enum JsonType
{
None,
Object,
Array,
String,
Int,
Long,
Double,
Boolean
}
举例:
{ "firstName":"Shen", "lastName":"Jun" }
• 名称和值之间用冒号分隔
• 多个变量之间用逗号分隔
• 结尾不需要添加分号
JSON 对象
JSON 数组
JSON数组在方括号中书写,数组可包含多个对象:
{
"people": [
{ "firstName" : "Brett", "lastName" : "McLaughlin" },
{ "firstName" : "Jason", "lastName" : "Hunter" },
{ "firstName" : "Elliotte", "lastName" : "Harold" }
]
归纳小结
1、对象是属性、值对的集合。一个对象的开始于“{”,结束于“}”。每一个属性名和值间用“:”提示,属性间用“,”分隔。
2、数组是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。
3、值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。
5、JSON 提供了一种优秀的面向对象的方法,以便将元数据缓存到客户机上。
将 JSON 数据赋值给变量
例如,可以创建一个新的字符串变量,然后将 JSON 格式的数据字符串直接赋值给它:
string str = @"
{
""Name"":""shenjun"",
""Age"": 40,
""Birthday"" : ""1986-11-21"",
""Thumbnail"":
{
""Url"": ""http://xuanyusong.com"",
""Height"": 256,
""Width"": ""200""
},
{
""Url"": ""http://baidu.com"",
""Height"": 1024,
""Width"": ""500""
}
]
}";
访问数据
使用JsonData,JsonMapper来处理Json的编码和解析
void StreamWriteJson<T>(string path, T o)
{
using (FileStream fsWrite = File.Open (path, FileMode.OpenOrCreate)) {
string json = JsonMapper.ToJson (o);
byte[] buffer = System.Text.Encoding.UTF8.GetBytes (json);
fsWrite.Write (buffer, 0, buffer.Length);
}
}
T StreamReadJson<T>(string path)
{
using (FileStream fsReader = File.Open (path, FileMode.Open, FileAccess.Read)) {
byte[] buffer = new byte[1024];
int length;
System.Text.StringBuilder sb = new System.Text.StringBuilder ();
while ((length = fsReader.Read (buffer, 0, buffer.Length)) > 0) {
string result = System.Text.Encoding.UTF8.GetString (buffer, 0, length);
sb.Append (result);
}
T o = JsonMapper.ToObject<T> (s);
return o;
}
使用JsonWriter原始方式生成Json
将数组转换成json:["one","two","three","four"]
JsonWriter writer = new JsonWriter();
writer.WriteArrayStart();
writer.Write("one");
writer.Write("two");
writer.Write("three");
writer.Write("four");
writer.WriteArrayEnd();
将复合对象转换成json字符串
{"book":{"title":"android game!","author":"pei","bookdetail":{"pages":429,"about":null}}}
JsonWriter writer2 = new JsonWriter();
writer2.WriteObjectStart();
writer2.WritePropertyName("book");
writer2.WriteObjectStart();
writer2.WritePropertyName("title");
writer2.Write("android game!");
writer2.WritePropertyName("author");
writer2.Write("pei");
writer2.WritePropertyName("bookdetail");
writer2.WriteObjectStart();
writer2.WritePropertyName("pages");
writer2.Write(429);
writer2.WritePropertyName("about");
writer2.Write(null);
writer2.WriteObjectEnd();
writer2.WriteObjectEnd();
writer2.WriteObjectEnd();
Debug.Log(writer2.ToString());
文件的读写路径
JSON与XML
没有结束标签
更短
读写速度更快
使用数组
?