您的位置:首页 > 移动开发 > Unity3D

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

2017-04-07 15:44 507 查看
出处: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

 





using LitJson;  

using System;  

  

public class Person  

{  

    // C# 3.0 auto-implemented properties  

    public string   Name     { get; set; }  

    public int      Age      { get; set; }  

    public DateTime Birthday { get; set; }  

}  

  

public class JsonSample  

{  

    public static void Main()  

    {  

        PersonToJson();  

        JsonToPerson();  

    }  

  

    public static void PersonToJson()  

    {  

        Person bill = new Person();  

  

        bill.Name = "William Shakespeare";  

        bill.Age  = 51;  

        bill.Birthday = new DateTime(1564, 4, 26);  

  

        string json_bill = JsonMapper.ToJson(bill);  

  

        Console.WriteLine(json_bill);  

    }  

  

    public static void JsonToPerson()  

    {  

        string json = @"  

            {  

                ""Name""     : ""Thomas More"",  

                ""Age""      : 57,  

                ""Birthday"" : ""02/07/1478 00:00:00""  

            }";  

  

        Person thomas = JsonMapper.ToObject<Person>(json);  

  

        Console.WriteLine("Thomas' age: {0}", thomas.Age);  

    }  

}  

上文的输出:

[csharp] view
plain copy

 





{"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}  

Thomas' age: 57  


使用非泛型的JsonMapper.ToObject

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

[csharp] view
plain copy

 





using LitJson;  

using System;  

  

public class JsonSample  

{  

    public static void Main()  

    {  

        string json = @"  

          {  

            ""album"" : {  

              ""name""   : ""The Dark Side of the Moon"",  

              ""artist"" : ""Pink Floyd"",  

              ""year""   : 1973,  

              ""tracks"" : [  

                ""Speak To Me"",  

                ""Breathe"",  

                ""On The Run""  

              ]  

            }  

          }  

        ";  

  

        LoadAlbumData(json);  

    }  

  

    public static void LoadAlbumData(string json_text)  

    {  

        Console.WriteLine("Reading data from the following JSON string: {0}",  

                          json_text);  

  

        JsonData data = JsonMapper.ToObject(json_text);  

  

        // Dictionaries are accessed like a hash-table  

        Console.WriteLine("Album's name: {0}", data["album"]["name"]);  

  

        // Scalar elements stored in a JsonData instance can be cast to  

        // their natural types  

        string artist = (string) data["album"]["artist"];  

        int    year   = (int) data["album"]["year"];  

  

        Console.WriteLine("Recorded by {0} in {1}", artist, year);  

  

        // Arrays are accessed like regular lists as well  

        Console.WriteLine("First track: {0}", data["album"]["tracks"][0]);  

    }  

}  

上面例子的输出:

[csharp] view
plain copy

 





Reading data from the following JSON string:  

          {  

            "album" : {  

              "name"   : "The Dark Side of the Moon",  

              "artist" : "Pink Floyd",  

              "year"   : 1973,  

              "tracks" : [  

                "Speak To Me",  

                "Breathe",  

                "On The Run"  

              ]  

            }  

          }  

  

Album's name: The Dark Side of the Moon  

Recorded by Pink Floyd in 1973  

First track: Speak To Me  


Reader和Writer

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

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


使用JsonReader

[csharp] view
plain copy

 





using LitJson;  

using System;  

  

public class DataReader  

{  

    public static void Main()  

    {  

        string sample = @"{  

            ""name""  : ""Bill"",  

            ""age""   : 32,  

            ""awake"" : true,  

            ""n""     : 1994.0226,  

            ""note""  : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]  

          }";  

  

        PrintJson(sample);  

    }  

  

    public static void PrintJson(string json)  

    {  

        JsonReader reader = new JsonReader(json);  

  

        Console.WriteLine ("{0,14} {1,10} {2,16}", "Token", "Value", "Type");  

        Console.WriteLine (new String ('-', 42));  

  

        // The Read() method returns false when there's nothing else to read  

        while (reader.Read()) {  

            string type = reader.Value != null ?  

                reader.Value.GetType().ToString() : "";  

  

            Console.WriteLine("{0,14} {1,10} {2,16}",  

                              reader.Token, reader.Value, type);  

        }  

    }  

}  

输出如下:
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""
}
}
}";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: