JSON

【Unity3D教程:Unity JavaScript解析json unity3d用javascript

字号+ 作者:H5之家 来源:H5之家 2017-08-28 10:00 我要评论( )

Unity3D教程:Unity JavaScript解析json ,-【游戏蛮牛】-ar增强现实,虚拟现实,unity3d,unity3d教程下载首选u3d,unity3d官网

  • 楼主 henry
  • 收藏 2014-8-9 10:03:36
  • Unity JavaScript解析json的问题.

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

    首先要在Project里Import New Asset把LigJson.dll文件导入,然后在JavaScript脚本中就可以直接使用了。
    [mw_shl_code=applescript,true]
        function Start() {
        var s : String = "{'name':'aaa'}";
        var json : LitJson.JsonData = LitJson.JsonMapper.ToObject(s);
        print(json["name"]);
        }
        function Update () {
        }[/mw_shl_code]

    JsonData实现的接口如下:

    IJsonWrapper, IList, ICollection, IEnumerable, IOrderedDictionary, IDictionary, IEquatable<JsonData>

    JsonData需要从Json字符串返回的类型来判断该JsonData类型是否为数组,这一点可以从它的IsArray方法可以看出

    eg:

    [mw_shl_code=applescript,true]    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["name"]);//返回的结果: lisi
        // zhangsan
        }
        }
        JsonData j = JsonMapper.ToObject(a);
        print(j.IsArray);//返回false
        print(j["name"]);//返回aaa[/mw_shl_code]

    从上面的示例可以看出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类型的数组。

    [mw_shl_code=applescript,true]    JsonData[] jarr = JsonMapper.ToObject<JsonData[]>(s);
        foreach (JsonData jd in jarr)
        {
        print(jd.IsArray);// 返回false false
        }[/mw_shl_code]

    至于具体原因,主要还是用到了foreach这个循环方式了,还有一个原因就是Json框架的转换,一些原有的东西尽量不去更改。

    现在需要在原有的字串上动态添加一个节点,使用JsonData其实很简单:

    不过这里要分两种情况:即原字串为json数组和非数组

    一:非数组情况:

    [mw_shl_code=applescript,true]    JsonData j = JsonMapper.ToObject(a);
        j["www"] = "dsdfsd";
        print(JsonMapper.ToJson(j));//返回{'name':'aaa', 'www':'dsdfsd'}
    [/mw_shl_code]

    其实看JsonData类的这个方法就知道了:

    public JsonData this[int index] { get; set; }

    public JsonData this[string prop_name] { get; set; }

    注意,如果指定的key相同的话,后者将会覆盖。

    二:数组情况:

    [mw_shl_code=applescript,true]    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'}][/mw_shl_code]

    unity3d用javascript;unity3d json的使用;unity3d json 解析;json unity;unity litjson;unity3d 5 javascript;unity3d和javascript;javascript unity3d;json unity3d;unity3d解析json;unity 5.3 json;litjson unity

     

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

    相关文章
    • Unity3D学习笔记(二十五)引用第三方DLL,解析JSON

      Unity3D学习笔记(二十五)引用第三方DLL,解析JSON

      2017-05-02 14:00

    • 从零开始搭建游戏服务器内存数据库Redis

      从零开始搭建游戏服务器内存数据库Redis

      2017-03-22 16:00

    • Unity3D学习之使用 C#合成解析XML与JSON.doc.doc

      Unity3D学习之使用 C#合成解析XML与JSON.doc.doc

      2016-06-11 12:00

    • Unity3D脚本:Unity3D使用LitJson解析服务器上的JSON

      Unity3D脚本:Unity3D使用LitJson解析服务器上的JSON

      2016-01-31 10:32

    网友点评