• JSON(JavaScript Object Notation)
    • 存储和交换文本信息的语法。
    • JavaScript对象表示法
  • LitJson
    • 语法
    • 举例:
    • 归纳小结
    • 将 JSON 数据赋值给变量
    • 访问数据
    • 文件的读写路径
    • JSON与XML

    JSON(JavaScript Object Notation)

    存储和交换文本信息的语法。

    1. 是一种轻量级的数据交换格式。
    2. 采用完全独立于语言的文本格式。
    3. 使用了类似于C语言家族的习惯。
    4. 具有自我描述性,更易理解

    JavaScript对象表示法

    Json:是来源于JavaScript中的序列化方式,他可以很好的将我们的数组,对象等信息存储成一个文本文件,而且可以反序列化将数据恢复到我们的对象或者是数组当中去。我们利用它这样的特性可以实现游戏或者虚拟现实数据的记录,将这些记录我们可以存储在硬盘上,方便下一次启动程序后可以读回来。

    可以在 http://JSON.org 了解关于JSON的更多信息。

    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对象表示法语法的子集。

    1. 数据在 名称/值(键-值) 对中
    2. 数据由逗号分隔
    3. 花括号保存对象
    4. 方括号保存数组

    值的类型可以是:

    1. public enum JsonType
    2. {
    3. None,
    4. Object,
    5. Array,
    6. String,
    7. Int,
    8. Long,
    9. Double,
    10. Boolean
    11. }

    举例:

    JSON 对象在花括号中书写,对象可以包含多个名称/值对:

    1. "firstName":"Shen", "lastName":"Jun"
    2. 名称和值之间用冒号分隔
    3. 多个变量之间用逗号分隔
    4. 结尾不需要添加分号

    JSON 对象

    1. {
    2. "china": {
    3. "hangzhou":{"item":"1"},
    4. "shanghai":{"item":"2"},
    5. "chengdu":{"item":"3"}
    6. },
    7. "America": {
    8. "aa":{"item":"1"},
    9. "bb":{"item":"2"}
    10. }
    11. }

    JSON 数组

    1. JSON数组在方括号中书写,数组可包含多个对象:
    1. {
    2. "people": [
    3. { "firstName" : "Brett", "lastName" : "McLaughlin" },
    4. { "firstName" : "Jason", "lastName" : "Hunter" },
    5. { "firstName" : "Elliotte", "lastName" : "Harold" }
    6. ]
    7. }

    归纳小结

    1、对象是属性、值对的集合。一个对象的开始于“{”,结束于“}”。每一个属性名和值间用“:”提示,属性间用“,”分隔。

    2、数组是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。

    3、值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。

    4、字符串和数字的定义和C或Java基本一致。

    5、JSON 提供了一种优秀的面向对象的方法,以便将元数据缓存到客户机上。


    将 JSON 数据赋值给变量

    例如,可以创建一个新的字符串变量,然后将 JSON 格式的数据字符串直接赋值给它:

    1. string str = @"
    2. {
    3. ""Name"":""shenjun"",
    4. ""Age"": 40,
    5. ""Birthday"" : ""1986-11-21"",
    6. ""Thumbnail"":
    7. [
    8. {
    9. ""Url"": ""http://xuanyusong.com"",
    10. ""Height"": 256,
    11. ""Width"": ""200""
    12. },
    13. {
    14. ""Url"": ""http://baidu.com"",
    15. ""Height"": 1024,
    16. ""Width"": ""500""
    17. }
    18. ]
    19. }";

    访问数据

    使用JsonData,JsonMapper来处理Json的编码和解析

    1. JsonData jd = JsonMapper.ToObject(str);
    2. Debug.Log("name = " + (string)jd["Name"]);
    3. Debug.Log("Age = " + (int)jd["Age"]);
    4. Debug.Log("Birthday = " + (string)jd["Birthday"]);
    5. JsonData jdItems = jd["Thumbnail"];
    6. for (int i = 0; i < jdItems.Count; i++)
    7. {
    8. Debug.Log("URL = " + jdItems[i]["Url"]);
    9. Debug.Log("Height = " + (int)jdItems[i]["Height"]);
    10. Debug.Log("Width = " + jdItems[i]["Width"]);
    11. }
    1. void StreamWriteJson<T>(string path, T o)
    2. {
    3. using (FileStream fsWrite = File.Open (path, FileMode.OpenOrCreate)) {
    4. string json = JsonMapper.ToJson (o);
    5. byte[] buffer = System.Text.Encoding.UTF8.GetBytes (json);
    6. fsWrite.Write (buffer, 0, buffer.Length);
    7. }
    8. }
    9. T StreamReadJson<T>(string path)
    10. {
    11. using (FileStream fsReader = File.Open (path, FileMode.Open, FileAccess.Read)) {
    12. byte[] buffer = new byte[1024];
    13. int length;
    14. System.Text.StringBuilder sb = new System.Text.StringBuilder ();
    15. while ((length = fsReader.Read (buffer, 0, buffer.Length)) > 0) {
    16. string result = System.Text.Encoding.UTF8.GetString (buffer, 0, length);
    17. sb.Append (result);
    18. }
    19. string s = sb.ToString();
    20. T o = JsonMapper.ToObject<T> (s);
    21. return o;
    22. }
    23. }

    使用JsonWriter原始方式生成Json

    1. 将数组转换成json:["one","two","three","four"]
    2. JsonWriter writer = new JsonWriter();
    3. writer.WriteArrayStart();
    4. writer.Write("one");
    5. writer.Write("two");
    6. writer.Write("three");
    7. writer.Write("four");
    8. writer.WriteArrayEnd();

    将复合对象转换成json字符串

    1. {"book":{"title":"android game!","author":"pei","bookdetail":{"pages":429,"about":null}}}
    2. JsonWriter writer2 = new JsonWriter();
    3. writer2.WriteObjectStart();
    4. writer2.WritePropertyName("book");
    5. writer2.WriteObjectStart();
    6. writer2.WritePropertyName("title");
    7. writer2.Write("android game!");
    8. writer2.WritePropertyName("author");
    9. writer2.Write("pei");
    10. writer2.WritePropertyName("bookdetail");
    11. writer2.WriteObjectStart();
    12. writer2.WritePropertyName("pages");
    13. writer2.Write(429);
    14. writer2.WritePropertyName("about");
    15. writer2.Write(null);
    16. writer2.WriteObjectEnd();
    17. writer2.WriteObjectEnd();
    18. writer2.WriteObjectEnd();
    19. Debug.Log(writer2.ToString());

    文件的读写路径

    1. Resources.Load 在移动平台只读
    2. Application.dataPath 在移动平台没有读写权限
    3. Application.streamingAssetsPath 移动平台只读
    4. Application.temporaryCachePath 可读写
    5. Application.persistentDataPath 可读写

    JSON与XML

    类似XML,比XML更小、更快、更易解析。

    1. 没有结束标签
    2. 更短
    3. 读写速度更快
    4. 使用数组
    5. 不使用保留字

    ?