LUA组件使用说明
LUA组件使用说明
Lua组件的目标是能让用户在平台上写lua代码进行开发,不用去关心组件的打包。缺点是需要在本地调试好之后再粘贴代码。
Lua是一个脚本语言,性能接近C语言。但是有随时随地修改的优点。
应用举例
前面板拖入一个输入框和显示文本,分别表示测试输入和结果显示,lua组件将输入的格式转换为输出的格式。
这里想把如下格式转换:
{ "type":"report", "device_name":"device_lrrbrQKI8A", "driver":"opcda", "channel":"channel_Hp88RapAL5", "timestamp":"2020-11-24 09:20:04", "values":[ { "id":"3", "name":"test1", "desc":"测试1", "freq":"1000", "compute":"no;", "value":"8729", "updatetime":"2020-11-24 09:20:03", "quality":"Good", "address":"Random.Int4", "server_timestamp":"2020\/11\/24 17:20:05", "type":"default" }, { "id":"4", "name":"test2", "desc":"测试2", "freq":"1000", "compute":"no;", "value":"9984", "updatetime":"2020-11-24 09:20:03", "quality":"Good", "address":"Random.Int2", "server_timestamp":"2020\/11\/24 17:20:05", "type":"default" } ] } |
---|
转换结果:
{ "test1": "8729", "test2": "9984", } |
---|
首先,在本地安装lua的IDE,再打开lua IDE,先本地编辑调试代码。
进入JSON在线格式化工具,将输入源变成字符串:
JSON在线 | JSON解析格式化—SO JSON在线工具
依次点击,压缩和转义。
在这里编写代码,测试数据是压缩转义后的输入数据,给到第一行的local data。
这里看到打印后的数据已经是自己想要的东西了。代码如下
| local data="{\"type\":\"report\",\"device_name\":\"device_lrrbrQKI8A\",\"driver\":\"opcda\",\"channel\":\"channel_Hp88RapAL5\",\"timestamp\":\"2020-11-24 09:20:04\",\"values\":[{\"id\":\"3\",\"name\":\"test1\",\"desc\":\"测试1\",\"freq\":\"1000\",\"compute\":\"no;\",\"value\":\"8729\",\"updatetime\":\"2020-11-24 09:20:03\",\"quality\":\"Good\",\"address\":\"Random.Int4\",\"server_timestamp\":\"2020\\/11\\/24 17:20:05\",\"type\":\"default\"},{\"id\":\"4\",\"name\":\"test2\",\"desc\":\"测试2\",\"freq\":\"1000\",\"compute\":\"no;\",\"value\":\"9984\",\"updatetime\":\"2020-11-24 09:20:03\",\"quality\":\"Good\",\"address\":\"Random.Int2\",\"server_timestamp\":\"2020\\/11\\/24 17:20:05\",\"type\":\"default\"}]}"
local json = loadfile("json.lua")()
local indata_1 = json.decode(data)
local values = indata_1.values
local result_1 = {}
for i,v in ipairs(values) do
--print(i, v["name"], v["value"])
result_1[v["name"]] = v["value"]
end
local out_value = json.encode(result_1)
print(out_value) |
| --- |
这里为了将消息输出,最后修改一下加上2行代码,这里表示将数据输出到out1.
local j = {{ port="out1", data = out_value }} return json.encode(j) |
---|
最后修改成这样, 粘贴到LUA里面:
| function main(port, data)
local json = loadfile("lua/json.lua")()
local indata_1 = json.decode(data)
local values = indata_1.values
local result_1 = {}
for i,v in ipairs(values) do
--print(i, v["name"], v["value"])
result_1[v["name"]] = v["value"]
end
local out_value = json.encode(result_1)
print(out_value)
local j = {{ port="out1", data = out_value }}
return json.encode(j)
end |
| --- |
这里保存的最终结果如图所示:
如果代码运行出错,会在LUA日志里面打印错误信息。
测试:
在输入框输入需要转换的字符串,得到文本框显示正确的结果。