LitJson解析Json,使用了LitJson这个开源组件,如果在C#脚本下使用该组件处理json很容易,在JavaScript脚本中处理其实也不难。首先要在Project里Import New Asset把LigJson.dll文件导入,然后在JavaScript脚本中就可以直接使用了。
function Start() {
var s : String = “{'name':'aaa'}”;
var json : LitJson.JsonData = LitJson.JsonMapper.ToObject(s);
print(json[“name”]);
}
function Update () {
}复制代码
JsonData实现的接口如下:
IJsonWrapper, IList, ICollection, IEnumerable, IOrderedDictionary, IDictionary, IEquatable<JsonData>复制代码
JsonData需要从Json字符串返回的类型来判断该JsonData类型是否为数组,这一点可以从它的IsArray方法可以看出。
eg:
string s = “[{'name':'lisi'},{'name':'zhangsan'}]”;
string a = “{'name':'aaa'}”;
JsonData[] jarr = JsonMapper.ToObject<JsonData[]>(s);
print(jarr. IsArray);//返回true
if(jarr.IsArray){
foreach(JsonData jd in jarr){
print(jd[“name”]);//返回结果: lisi
// zhangsan
}
}
JsonData jdata = JsonMapper.ToObject(s);
print(jdata.IsArray);//返回true
if (jdata.IsArray)
{
for (int i = 0; i < jdata.Count;i ++ )
{
print(jdata[i][“name”]);//返回的结果: lisi
// zhangsan
}
}
JsonData j = JsonMapper.ToObject(a);
print(j.IsArray);//返回false
print(j[“name”]);//返回aaa复制代码
从上面的示例可以看出JsonData是否能以数组的方式访问需看json字符串返回的是否是数组类型的,示例展示了最基本的JsonData用法: 创建一个JsonData通常由JsonMapper的ToObject方法,这个方法有3个重载:
JsonMapper.ToObject(JsonReader reader);
JsonMapper.ToObject(string json);
JsonMapper.ToObject(System.IO.TextReader reader);复制代码
其中JsonReader类也是一个读取json字串的类,不过它是按行的方式读取,不能像key-value的方式读取json的值,第二个是最常见的创建JsonData的方式,它只需提供一个json字串即可,第三个是读取一个包含json字符的文本流来创建一个JsonData。
JsonMapper中还有一个ToObject方法:
public static T ToObject<T>();复制代码
当然它也有三个重载,同上,目前我主要使用这个方法来创建JsonData类型的数组。
JsonData[] jarr = JsonMapper.ToObject<JsonData[]>(s);
foreach (JsonData jd in jarr)
{
print(jd.IsArray);// 返回false false
}复制代码
至于具体原因,主要还是用到了foreach这个循环方式,还有一个原因就是正在做Json框架的转换,一些原有的东西尽量不去更改。现在需要在原有的字串上动态添加一个节点,怎么办,使用JsonData其实很简单:
不过这里要分两种情况:即原字串为json数组和非数组。
一.非数组情况:
JsonData j = JsonMapper.ToObject(a);
j[“www”] = “dsdfsd”;
print(JsonMapper.ToJson(j));//返回{'name':'aaa', 'www':'dsdfsd'}复制代码
其实大家看JsonData类的这个方法就知道了:
public JsonData this[int index] { get; set; }
public JsonData this[string prop_name] { get; set; }复制代码
注意,如果指定的key相同的话,后者将会覆盖。
二.数组情况:
JsonData j = JsonMapper.ToObject(s);
JsonData jdata1 = new JsonData();
jdata1[“wwww”] = “wuwu”;
j.Add(jdata1);
print(JsonMapper.ToJson(j));
//返回: [{'name':'lisi'},{'name':'zhangsan'},{'wwww':'wuwu'}]复制代码
* 版权声明:转载时请以超链接形式标明文章原始出处和作者信息
* 本文来自:Unity3D 教程手册
* 本文链接: