Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua
一、引言 [root@linux cjson]# pwd /root/software/download/cjson [root@linux cjson]# wget https://www.kyne.com.au/~mark/software/download/lua-cjson-2.1.0.tar.gz ?????????????? ??????? 1.2、解压到当前目录,当然也可以解压到其他目录,解压到其他目录,比如:/usr/local,命令如下:tar zxvf lua-cjson-2.1.0.tar.gz -C(大写的) /usr/local 当前目录 cjson 显示当前目录下的文件和目录 [root@linux cjson]# ls lua-cjson-2.1.0.tar.gz 解压到当前目录 [root@linux cjson]# tar zxvf lua-cjson-0.tar.gz [-C /usr/local] ... complete!
???????????????????? 解压成功后的目录结构:
???????? 1.3、进入到解压目录的根目录,准备修改Makefile文件,用vim打开的修改文件的时候,注意名称大小写拼写正确。 [root@linux cjson]# pwd /root/software/download/cjson 进入到CJSON的解压根目录 [root@linux cjson]# cd lua-cjson-0 进入到根目录,修改Makefile文件 [root@linux lua-cjson-0]# vim Makefile ?????????????? ???????? 1,4、vim 进入Makefile文件,修改PREFIX选项,修改完毕,按ESC按钮,再按:,最后按wq,保存退出。 当前目录 [root@linux lua-cjson-]# pwd /root/software/download/cjson/lua-cjson-0 ???????????????????? ???????? 1.5、使用make命令在解压文件的根目录下进行编译。 [root@linux lua-cjson-]# make 开始编译 ? ??????????????? ??? ??? ???????? 1.6、最后使用 make install 安装cjson软件包。 ]# make install 开始安装 ????????????????????? ???????? 1.7、cjson.so文件很重要,是核心运行文件,如果出现错误,在某某目录没有找到cjson这个文件,就在其他目录找到,并拷贝到目标目录,可以解决所出现的错误。 [root@linux program]# pwd /root/application/program 拷贝sjson.so文件到指定目录 [root@linux program]# sudo cp -r cjson/lib/lua/5.1/cjson.so /usr/local/lib/lua/5.3
???????????????????????? 只需要把cjson.so文件拷贝到【/usr/local/lib/lua/5.3(这个版本具体情况要看具体情况)/】目录下就可以了 1、从Linux命令行模式进入lua命令行测试安装是否正确 [root@linux lua-cjson-]# lua Lua 5.3.4 Copyright (C) 1994-2017 Lua.org PUC-Rio >local cjson=require("cjson") >local cjson2=require cjson.safe" //以上所有操作没有提示任何错误 2、我们在Linux命令行下在执行lua命令,执行lua脚本,测试是否安装成功 05.lua脚本文件的源码 local cjson=require local smapleJson=[[{age":23",testArray":{array":[8,1)">9,1)">1,1)">14,1)">15]},1)">baiduwww.baidu.com}]]; local data=cjson.decode(sampleJson) print(data[]); print(data["][1]) //没有提示任何错误,安装成功 ? ??????????????????????? ? ??? 2、在Linux环境下,在Lua脚本里面使用cjson来解析类型。 1 cjsonDemo.lua的源代码如下: 2 3 local cjson = require " 4 local retTable = {}; --最终产生json的表 5 6 --顺序数值 7 8 local intDatas = {}; 9 intDatas[1] = 100; 10 intDatas[2] = 10011 12 --数组 13 14 local aryDatas =15 aryDatas[1] =16 aryDatas[1][键11"] = 值1117 aryDatas[键12值1218 aryDatas[2] =19 aryDatas[2][键21值2120 aryDatas[键22值2221 22 --对Table赋值 23 24 retTable[键1值125 retTable[12326 retTable[int_datas"] = intDatas; 27 retTable[aryDatas aryDatas; 28 29 --将表数据编码成json字符串 30 31 local jsonStr = cjson.encode(retTable); 32 print(jsonStr); 33 34 return retTable; 35 36 以上为Lua源码 ? 开始执行命令 [root@linux luascript]# pwd /root/application/program/luascript lua脚本存放的位置 [root@linux luascript]# lua cjsonDemo.lua {100,1)">"],1)">2123,1)">":[{"},{"}]}
??? 3、在Windows环境下,用C#执行lua脚本 ??????? ? ? 3.1、在VS2015中建一个C#控制台应用程序,并添加LuaInterface.dll的引用 ????????????? ? ? ? ?? LuaInterface下载地址:http://luaforge.net/projects/luainterface/ (下载luainterface-1.5.3,这里面的资源比较多) ?????????????? LuaInterface.Lua类是CLR访问Lua解释器的主要接口,一个LuaInterface.Lua类对象就代表了一个Lua解释器(或Lua执行环境),Lua解释器可以同时存在多个,并且它们之间是完全相互独立的。 ??????????????????? ?????????? 3.2、在Windows环境下,Lua脚本文件使用上面提到的源文件 cjsonDemo.lua。 ??????????????????????? 文件所在地址如下:C:UsersAdministratorDesktopRedisLuaScriptcjsonDemo.lua 源码如下: local retTable = {}; --最终产生json的表 --顺序数值 local intDatas = {}; intDatas[; intDatas[; --数组 local aryDatas = {}; aryDatas[; aryDatas[对Table赋值 retTable[; retTable[ intDatas; retTable[ aryDatas; return retTable;
using LuaInterface; 引入的dll using System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks; namespace CSharpPinvokeLuaDemo { class Program { static void Main(string[] args) { 新建一个Lua解释器,每一个Lua实例都相互独立,一个global全局域 Lua lua = new Lua(); --------------------------------------------------- Lua的索引操作[]可以创建、访问、修改global域 lua[20; lua[nameMr.huang; string luaCode = print("This is Lua code"); lua.DoString(luaCode);执行lua脚本代码 object[] result=lua.DoFile(@"C:UsersAdministratorDesktopRedisLuaScriptcjsonDemo.lua");执行lua脚本文件,这里我直接用了绝对定位 double age = (double)lua[]; Console.WriteLine(age = {0},age); Console.WriteLine(width = {0}width]); Console.ReadKey(); } } }
<startup useLegacyV2RuntimeActivationPolicy=true"> <supportedRuntime version=v4.0" sku=.NETFramework,Version=v4.5.2" /> <supportedRuntime version=v2.0.50727"/> </startup>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |