用lua语言访问一个URL,然后获取到相应的json数据

用lua语言访问一个URL,然后获取到相应的json数据,第1张

local cjson = require("cjson");

local file = ioopen(path,"r")

local json = file:read("a")

file:close()

youWantJson = cjsondecode(json)

FREESWITCH中录音你如果要搞到LUA脚本里就麻烦了,直接在dialplan里面就能录音。

<action application="set" data="execute_on_answer=record_session /data/media/${strftime(%Y%m%d)}/${strftime(%Y%m%d%H)}/${uuid}_$1_${caller_id_number}wav"/>

时间也都是从FS上面获取到传进LUA脚本里的。我是这么使用的。

调用 GetLuaVar(luastate,"ProjectAone") 把ProjectAone的值取到堆栈上,然后根据类型自己用 lua_tonumber(luastate, -1) 或 lua_tostring(luastate, -1)得数据void GetLuaVar(lua_State pLuaState,const char strVarName){const char pIndS = strVarName;const char pIndE = strVarName;T_B8 bParts = false;//判断是否分两部分,因为第一部分要用lua_getglobal,其他部分用lua_gettablewhile( 0 != pIndE ){if( '' == pIndE ){if(bParts){lua_pushstring(pLuaState,std::string(pIndS,pIndE - pIndS)c_str());lua_gettable(pLuaState,-2);lua_remove(pLuaState,-2);}else{lua_getglobal(pLuaState,std::string(pIndS,pIndE - pIndS)c_str());bParts = true;}++pIndE;pIndS = pIndE;}else{++pIndE;}}if(bParts){lua_pushstring(pLuaState,std::string(pIndS,pIndE - pIndS)c_str());lua_gettable(pLuaState,-2);lua_remove(pLuaState,-2);}else{lua_getglobal(pLuaState,std::string(pIndS,pIndE - pIndS)c_str());}}

lua的随机函数

mathrandom(m,n) m,n表示范围

mathrandomseed(ostime())

local x = mathrandom(100,200)

local y = mathrandom(400,500)

得到的xy 就是新的值

只用lua通过odbc的方式连接过oracle数据库。两个问题:1、odbc里配置的数据源,进行test

connection是否成功2、con

=

assert

(env:connect("odbc_freedom"))这一行sql

server可以省略用户名和密码么?---

con

=

assert

(env:connect("odbc_freedom",

user,

pwd))

 一:

new lua()DoFile("myLualua");              //执行lua脚本      /myLualua:要         执行的lua的脚本名字

new lua()DoString("num = 2");             //读取脚本

注意:脚本文件必须和工程目录所在是同一个路径不然会找不到lua的          脚本

对lua脚本的位置放置:

      1)直接将lua文件,放在工程目录下面的Debug文件夹下

       2)将lua脚本的属性中 "复制到输出目录" 选择“始终复制”

--1导入luanet程序集,该程序集负责 lua call C#

require “luanet”

--2加载程序集(命名空间)

uanetload_assembly(“System”)         // 加载程序集(我们说过程序集其实就是exe或者dll文件)

--3获取类别(获取类名)

Test = luanetimport_type(“SystemTest”)      //引入类(Test就是类名)

--4调用构造函数初始化C#脚本的类对象

--调用无参数的构造函数

-- test = Test()

--调用有参数的构造函数 ----int

-- test = Test(10)

--调用有参数的构造函数 ----string

-- test = Test("10")

-- lua调用C#构造函数规则---> 自动匹配最近的那个

-- -对于某些情况并不适用,比如说C#函数中有两个一个参数的构造函数重载时即会发生匹配错误的情况

--- 这种情况我们需要手动指定调用哪个构造函数

test_argInt = luanetget_constructor_bysig(Test,"SystemString")

t = test_argInt(3)

-- 5调用C#属性

print(tLanguageNume)

-- 调用Test类中的TestPrint()方法,使用的是":"

t:TestPrint(10);

-- 调用Test类中的静态方法,使用的是""

TestTestStatciPrint(9)

--调用带有ref参数的方法

t:RefMethod(8)

--调用带有out参数的方法(带有out的参数可以不写,即不传参数)

--  var,var2 = t:OutMethod("hello")

-- print(var2)

-- v1,v2,v3,v4 = t:OutMethod(10)

tb = t:OutMethod(10)

print(type(tb))

你好,以前没接触过lua,刚自己试了一下,就按照你问题中的"23^Hello^你好^2000^worldtxt"这个字符串为例,以^为分隔符来说吧:

---------------start---------------

str = "23^Hello^你好^2000^worldtxt"

list = tablepack()

for w in stringgmatch(str, "[^^]+") do

print(w)

tableinsert(list, w)

end

---------------start---------------

解释:代码共6行,

第1行:定义一个变量str,内容为"23^Hello^你好^2000^worldtxt",这也是我们要处理的字符串

第二行: 定义一个空列表,它是用在下面的for循环中,存放以"^"作为分隔符的每一部分

第三行:简单来看是个for循环,深入一点来看,也就是stringgmatch(str,"[^^]+")这部分需要解释一下,它表示调用的是string库的gmatch()函数,这个函数有两个参数,第1个参数为要处理的字符串,咱们这里就是上面定义的str,第二个参数就是我们要在这个字符串中匹配什么样的内容,这里的匹配内容写的是"[^^]+",学过正则的很好理解,单纯的[abc]表示匹配任意单个字符a或b或c,有一点特殊的是一旦[]中的字符是以^打头的,则表示匹配任意非[]中列出的字符,如[^abc]表示匹配任意除abc外的其它任一字符,所以[^^]解释为匹配除^外的任一字符,举例来说,如果我们有字符串"23^Hello",如果用[^^]匹配的话,最终得到的是7个单个字符,即"2","3","H","e","l","l","o",显示这不符合我们的题意,所以在这基础上改进了一下,即在其后又加了个+号,[^^]+,这里的+号表示尽可能多地匹配它前面内容,这里也就是尽可能多地匹配[^^],所以[^^]+在处理"23^Hello"的时候,结果得到的就是"23","Hello"这里关于用到的这个正则说的不是太清楚,多练练就明白了。最后,第3行把函数部分给替换掉后,可以理解为:for w in [23,Hello,你好,2000,worldtxt],每次从[]中取一个值赋给w,然后执行for下面的语句,接着往下看

第4行,接第3行尾,就是把每次赋给w的值都打印出来

第5行,将每次赋给w的值都追加到列表list中

第6行,for循环语法上的闭合关键字,这个没啥说的

到此,我们得到了一个列表值为[23,Hello,你好,2000,worldtxt]的list,此时我们就可以使用list[n]来取我们想要的值了 。

如果你要问上面最3条最后不都有[23,Hello,你好,2000,worldtxt]了嘛,为啥还要那么麻烦,直接使用stringgmatch()函数不就行了嘛,其实第3条结尾我那么写只是为了让你好理解,实际上gmatch()函数的返回值并不是列表,而是一个可迭代的函数,而for循环的作用就是把gmatch()函数返回的这个可迭代的函数中的每个元素都取出来并赋给列表list

说的有点啰嗦了,希望对你有帮助吧,另外,我从没用过lua,也是刚查了查,自己实践了一下,希望不会形成误导

以上就是关于用lua语言访问一个URL,然后获取到相应的json数据全部的内容,包括:用lua语言访问一个URL,然后获取到相应的json数据、freeswitch,在lua脚本如何获取通话时间、如何解析Lua中的table数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9463168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存