JSON

Unity JavaScript 解析json

字号+ 作者:H5之家 来源:H5之家 2017-03-16 10:02 我要评论( )

使用WWW访问Web后台服务,返回json数据,请教有人在Unity下使用JavaScript解析过吗?nbsp;网上有个提出,可以直接eval(www.text)返回jso

Unity JavaScript解析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框架的转换,一些原有的东西尽量不去更改.

OK,现在我需要在原有的字串上动态添加一个节点,怎么办,使用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'}]
以上API的使用及示例程序,参考自网络,感谢原创者的分享!

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 解析javascript 数组以及json元素的添加删除

    解析javascript 数组以及json元素的添加删除

    2017-03-14 11:00

  • 对象与 JSON

    对象与 JSON

    2017-03-13 12:00

  • UE4学习:下载文件并转成JSON类型数据

    UE4学习:下载文件并转成JSON类型数据

    2017-03-12 09:00

  • Json在线教程

    Json在线教程

    2017-03-11 12:00

网友点评
c