zhouqijie

一、LitJson

JSON对象访问示例:

string json = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\blocks.json");
Debug.Log("Json Length: " + json.Length);
JsonData jData = JsonMapper.ToObject(json);


JsonData prefabs = jData["prefabs"];

foreach (string key in prefabs.Keys)
{
    Debug.Log("Key:" + key);
    if (prefabs[key].ContainsKey("symmetry"))
    {
        Debug.Log("  symmetry: " + prefabs[key]["symmetry"].ToString());
    }
}

JSON数组访问示例:

string json = @"{
'materials':[
{'materialName': 'mat1'},
{'materialName': 'mat2'}
]

}";

JsonData jData = JsonMapper.ToObject(json);

JsonData jMats = jData["materials"];

foreach (JsonData item in jMats)
{
    Debug.Log("MatName: " + item["materialName"]);
}

二、JsonReader和JsonWritter

Reader示例:

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                     

Writter示例:

using LitJson;
using System;
using System.Text;

public class DataWriter
{
    public static void Main()
    {
        StringBuilder sb = new StringBuilder();
        JsonWriter writer = new JsonWriter(sb);

        writer.WriteArrayStart();
        writer.Write(1);
        writer.Write(2);
        writer.Write(3);

        writer.WriteObjectStart();
        writer.WritePropertyName("color");
        writer.Write("blue");
        writer.WriteObjectEnd();

        writer.WriteArrayEnd();

        Console.WriteLine(sb.ToString());
    }
}

输出:

[1,2,3,{"color":"blue"}]