【Unity3D插件】在Unity中讀寫文件數據:LitJSON快速教程


作者:王選易,出處:http://www.cnblogs.com/neverdie/ 歡迎轉載,也請保留這段聲明。如果你喜歡這篇文章,請點【推薦】。謝謝!

QQ圖片20140529123319

介紹

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

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);
    }
}

上文的輸出:

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

使用非泛型的JsonMapper.ToObject

當不存在特定的JSON數據類時,它將返回一個JSONData實例。JSONData是一種通用型可以保存任何數據類型支持JSON,包括list和dictionary。

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]);
    }
}

上面例子的輸出:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM