Unity 读写Json数据:LitJSON快速教程

出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明

介绍

JSON是一个简单的,但功能强大的序列化数据格式。它定义了简单的类型,如布尔,数(int和float)和字符串,和几个数据结构:list和dictionnary。可以在http://JSON.org了解关于JSON的更多信息。

litjson是用C #编写的,它的目的是要小,快速,易用。它使用了Mono框架。

安装LitJSON

将LitJSON编译好的dll文件通过Import New Asset的方式导入到项目中,再使用Using LitJSON即可使用JSONMapper类中的简便方法。dll的下载地址在这里.

将JSON转化为Object并可逆向转化

为了在.Net程序中使用JSON格式的数据。一个自然的方法是使用JSON文本生成一个特定的类的一个新实例;为了匹配类的格式,一般存储的JSON字符串是一个字典。

另一方面,为了将对象序列化为JSON字符串,一个简单的导出操作,听起来是个好主意。

为了这个目的,LitJSON包引入了JsonMapper类,它提供了两个用于做到  JSON转化为object 和 object转化为JSON 的主要方法。这两个方法是jsonmapper.toobject和jsonmapper.tojson。

将object转化为字符串之后,我们就可以将这个字符串很方便地在文件中读取和写入了。

一个简单的JsonMapper的例子

在下面的例子中,ToObject方法有一个泛型参数,来指定返回的某种特定的数据类型:即JsonMapper.ToObject<T>。

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using LitJson;  
  2. using System;  
  3.   
  4. public class Person  
  5. {  
  6.     // C# 3.0 auto-implemented properties  
  7.     public string   Name     { getset; }  
  8.     public int      Age      { getset; }  
  9.     public DateTime Birthday { getset; }  
  10. }  
  11.   
  12. public class JsonSample  
  13. {  
  14.     public static void Main()  
  15.     {  
  16.         PersonToJson();  
  17.         JsonToPerson();  
  18.     }  
  19.   
  20.     public static void PersonToJson()  
  21.     {  
  22.         Person bill = new Person();  
  23.   
  24.         bill.Name = "William Shakespeare";  
  25.         bill.Age  = 51;  
  26.         bill.Birthday = new DateTime(1564, 4, 26);  
  27.   
  28.         string json_bill = JsonMapper.ToJson(bill);  
  29.   
  30.         Console.WriteLine(json_bill);  
  31.     }  
  32.   
  33.     public static void JsonToPerson()  
  34.     {  
  35.         string json = @"  
  36.             {  
  37.                 ""Name""     : ""Thomas More"",  
  38.                 ""Age""      : 57,  
  39.                 ""Birthday"" : ""02/07/1478 00:00:00""  
  40.             }";  
  41.   
  42.         Person thomas = JsonMapper.ToObject<Person>(json);  
  43.   
  44.         Console.WriteLine("Thomas' age: {0}", thomas.Age);  
  45.     }  
  46. }  

上文的输出:

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. {"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}  
  2. Thomas' age: 57  

使用非泛型的JsonMapper.ToObject

当不存在特定的JSON数据类时,它将返回一个JSONData实例。JSONData是一种通用型可以保存任何数据类型支持JSON,包括list和dictionary。

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using LitJson;  
  2. using System;  
  3.   
  4. public class JsonSample  
  5. {  
  6.     public static void Main()  
  7.     {  
  8.         string json = @"  
  9.           {  
  10.             ""album"" : {  
  11.               ""name""   : ""The Dark Side of the Moon"",  
  12.               ""artist"" : ""Pink Floyd"",  
  13.               ""year""   : 1973,  
  14.               ""tracks"" : [  
  15.                 ""Speak To Me"",  
  16.                 ""Breathe"",  
  17.                 ""On The Run""  
  18.               ]  
  19.             }  
  20.           }  
  21.         ";  
  22.   
  23.         LoadAlbumData(json);  
  24.     }  
  25.   
  26.     public static void LoadAlbumData(string json_text)  
  27.     {  
  28.         Console.WriteLine("Reading data from the following JSON string: {0}",  
  29.                           json_text);  
  30.   
  31.         JsonData data = JsonMapper.ToObject(json_text);  
  32.   
  33.         // Dictionaries are accessed like a hash-table  
  34.         Console.WriteLine("Album's name: {0}", data["album"]["name"]);  
  35.   
  36.         // Scalar elements stored in a JsonData instance can be cast to  
  37.         // their natural types  
  38.         string artist = (string) data["album"]["artist"];  
  39.         int    year   = (int) data["album"]["year"];  
  40.   
  41.         Console.WriteLine("Recorded by {0} in {1}", artist, year);  
  42.   
  43.         // Arrays are accessed like regular lists as well  
  44.         Console.WriteLine("First track: {0}", data["album"]["tracks"][0]);  
  45.     }  
  46. }  

上面例子的输出:

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Reading data from the following JSON string:  
  2.           {  
  3.             "album" : {  
  4.               "name"   : "The Dark Side of the Moon",  
  5.               "artist" : "Pink Floyd",  
  6.               "year"   : 1973,  
  7.               "tracks" : [  
  8.                 "Speak To Me",  
  9.                 "Breathe",  
  10.                 "On The Run"  
  11.               ]  
  12.             }  
  13.           }  
  14.   
  15. Album's name: The Dark Side of the Moon  
  16. Recorded by Pink Floyd in 1973  
  17. First track: Speak To Me  

Reader和Writer

一些人喜欢使用stream的方式处理JSON数据,对于他们, 我们提供的接口是jsonreader和jsonwriter。

JSONMapper实际上是建立在以上两个类的基础上的,所以你可以把这两个类当成是litJSON的底层接口。

使用JsonReader

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using LitJson;  
  2. using System;  
  3.   
  4. public class DataReader  
  5. {  
  6.     public static void Main()  
  7.     {  
  8.         string sample = @"{  
  9.             ""name""  : ""Bill"",  
  10.             ""age""   : 32,  
  11.             ""awake"" : true,  
  12.             ""n""     : 1994.0226,  
  13.             ""note""  : [ ""life""""is""""but""""a""""dream"" ]  
  14.           }";  
  15.   
  16.         PrintJson(sample);  
  17.     }  
  18.   
  19.     public static void PrintJson(string json)  
  20.     {  
  21.         JsonReader reader = new JsonReader(json);  
  22.   
  23.         Console.WriteLine ("{0,14} {1,10} {2,16}""Token""Value""Type");  
  24.         Console.WriteLine (new String ('-', 42));  
  25.   
  26.         // The Read() method returns false when there's nothing else to read  
  27.         while (reader.Read()) {  
  28.             string type = reader.Value != null ?  
  29.                 reader.Value.GetType().ToString() : "";  
  30.   
  31.             Console.WriteLine("{0,14} {1,10} {2,16}",  
  32.                               reader.Token, reader.Value, type);  
  33.         }  
  34.     }  
  35. }  
输出如下:
Token      Value             Type
------------------------------------------
   ObjectStart                            
  PropertyName       name    System.String
        String       Bill    System.String
  PropertyName        age    System.String
           Int         32     System.Int32
  PropertyName      awake    System.String
       Boolean       True   System.Boolean
  PropertyName          n    System.String
        Double  1994.0226    System.Double
  PropertyName       note    System.String
    ArrayStart                            
        String       life    System.String
        String         is    System.String
        String        but    System.String
        String          a    System.String
        String      dream    System.String
      ArrayEnd                            
     ObjectEnd
Unity中Json有多个{}的格式
string a = @"{
    ""action"":""1"",
""msd"":""2"",
""terrainId"":""32131"",
""body"":{
""terrainId"":""5454"",
""type"":""1111"",
""scene"":""2222"",
""mouse"":""3333"",
""season"":""4444"",
""weather"":""5555"",
""hour"":""6666"",
""wind"":""7777"",
""lightValue"":""8888"",
""boo"":""9999"",
""Name"":""0"",
""PositionX"":""1"",
""PositionY"":""2"",
""PositionZ"":""3"",
""arm"":""4"",
""sight"":{
""type"":""a"",
""mass"":""b"",
""Vector"":""c"",
""int1"":""d"",
""int2"":""e""
},
""target"":{
""id"":""F1"",
""positionX"":""F2"",
""positionY"":""F3"",
""positionZ"":""F4"",
""Style"":""F5"",
""Speed"":""F6"",
""distance"":""F7"",
""number"":""F8""
}
}
}";


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值