Unity 学习Json篇

Posted Unity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 学习Json篇相关的知识,希望对你有一定的参考价值。

 

介绍

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>。

 1 using LitJson;  
 2 using System;  
 3   
 4 public class Person  
 5 {  
 6     // C# 3.0 auto-implemented properties  
 7     public string   Name     { get; set; }  
 8     public int      Age      { get; set; }  
 9     public DateTime Birthday { get; set; }  
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 }  

上文的输出:

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。

 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 }  

上面例子的输出:

 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

 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


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

以上是关于Unity 学习Json篇的主要内容,如果未能解决你的问题,请参考以下文章

Unity 优化篇 | 优化专栏《导航帖》,全面学习Unity优化技巧,让我们的Unity技术上升一个档次

Unity 优化篇 | 优化专栏《导航帖》,全面学习Unity优化技巧,让我们的Unity技术上升一个档次

Unity优化篇 | Unity脚本代码优化策略,快速获取 游戏对象 和 组件 的方法文末送书

Unity3D学习:使用JSON进行对象数据的存储读取

Unity学习使用Json长久储存ScriptableObject数据

Unity学习使用Json长久储存ScriptableObject数据