unity3d解析json

使用了LitJson这个开源组件http://litjson.sourceforge.net/
如果在C#脚本下使用该组件处理json很容易,在JavaScript脚本中处理其实也不难。。。

首先要在Project里Import New Asset把LigJson.dll文件导入,然后在JavaScript脚本中就可以直接使用了。

[html]  view plain copy print ?
  1. function Start() {  
  2.         var s : String = "{'name':'aaa'}";  
  3.         var json : LitJson.JsonData = LitJson.JsonMapper.ToObject(s);  
  4.         print(json["name"]);  
  5. }  
  6. function Update () {  
  7. }  

JsonData实现的接口如下:
IJsonWrapper, IList, ICollection, IEnumerable, IOrderedDictionary, IDictionary, IEquatable<JsonData>
JsonData需要从Json字符串返回的类型来判断该JsonData类型是否为数组,这一点可以从它的IsArray方法可以看出

[html]  view plain copy print ?
  1. string s = "[{'name':'lisi'},{'name':'zhangsan'}]";  
  2. string a = "{'name':'aaa'}";  
  3.   
  4. JsonData[] jarr = JsonMapper.ToObject<JsonData[]>(s);  
  5. print(jarr. IsArray);//返回true  
  6. if(jarr.IsArray){  
  7.     foreach(JsonData jd in jarr){  
  8.         print(jd["name"]);//返回结果: lisi  
  9.                             //           zhangsan  
  10. }  
  11. }  
  12.   
  13. JsonData jdata = JsonMapper.ToObject(s);  
  14. print(jdata.IsArray);//返回true  
  15. if (jdata.IsArray)  
  16. {  
  17.     for (int i = 0; i < jdata.Count;i ++ )  
  18.     {  
  19.       print(jdata[i]["name"]);//返回的结果: lisi   
  20. //          zhangsan  
  21.     }  
  22. }  
  23.   
  24. JsonData j = JsonMapper.ToObject(a);  
  25. print(j.IsArray);//返回false  
  26. 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类型的数组

[html]  view plain copy print ?
  1. JsonData[] jarr = JsonMapper.ToObject<JsonData[]>(s);  
  2.   foreach (JsonData jd in jarr)  
  3.   {  
  4.      print(jd.IsArray);//  返回false false  
  5.   }  

其实大家看JsonData类的这个方法就知道了:
public JsonData this[int index] { get; set; }
public JsonData this[string prop_name] { get; set; }
注意,如果指定的key相同的话,后者将会覆盖
二:数组情况:

[html]  view plain copy print ?
  1. JsonData j = JsonMapper.ToObject(s);  
  2. JsonData jdata1 = new JsonData();  
  3. jdata1["wwww"] = "wuwu";  
  4. j.Add(jdata1);  
  5. print(JsonMapper.ToJson(j));  
  6. //返回: [{'name':'lisi'},{'name':'zhangsan'},{'wwww':'wuwu'}]  

转自unity3d圣典论坛里面的onejavaer(作者)

本文来自:http://blog.csdn.net/nateyang/article/details/8220847unity3d解析json

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值