tolua#的Examples-19_cjson

    string script = @"
    local json = require 'cjson'

    function Test(str)
        local data = json.decode(str)
        print(data.glossary.title)
        s = json.encode(data)
        print(s)
    end
";
    protected override LuaFileUtils InitLoader()
    {
        return new LuaResLoader();
    }
    
    protected override void OpenLibs()
    {
        base.OpenLibs();
        OpenCJson();                  
    }

    protected override void OnLoadFinished()
    {        
        base.OnLoadFinished();

        TextAsset text = (TextAsset)Resources.Load("jsonexample", typeof(TextAsset));
        string str = text.ToString();
        luaState.DoString(script);
        LuaFunction func = luaState.GetFunction("Test");
        func.BeginPCall();
        func.Push(str);
        func.PCall();
        func.EndPCall();
        func.Dispose();                        
    }

这个例子演示了tolua#如何通过cjson组件读取json文件,目前已经原生集成了cjson组件,不再需要自己添加了。里面比较重要的点是:
    protected override void OpenLibs()
    {
        base.OpenLibs();
        OpenCJson();                  
    }
打开cjson的库支持,这个开关在LuaClient.cs里面,贴下代码:
    protected void OpenCJson()
    {
        luaState.LuaGetField(LuaIndexes.LUA_REGISTRYINDEX, "_LOADED");
        luaState.OpenLibs(LuaDLL.luaopen_cjson);
        luaState.LuaSetField(-2, "cjson");

        luaState.OpenLibs(LuaDLL.luaopen_cjson_safe);
        luaState.LuaSetField(-2, "cjson.safe");
    }
修改lua虚拟机的注册表,打开cjson,将cjson表名设置进去。然后加载json文件TextAsset text = (TextAsset)Resources.Load("jsonexample", typeof(TextAsset));并将它传递给lua,直接解析:local data = json.decode(str)。当然你可以可以将解析出来的table,再次编码成字符串:s = json.encode(data)

上一篇: tolua#的Examples-18_Bundle
下一篇: tolua#的Examples-20_utf8
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭