JSON 解析
Lua Table
在 Lua 编程语言中,table
是 Lua 中的核心数据结构,它是一种动态的、可变的、关联数组和哈希表的组合。table
在 Lua 中用于存储多种类型的数据,并且是唯一一种可以拥有函数作为字段的结构。
以下是 table
的一些基本特点:
- 动态性:
table
的大小可以在运行时动态地改变。 - 可变性:
table
中的元素可以在运行时被添加、修改或删除。 - 索引:
table
可以通过整数索引访问,类似于数组。 - 哈希表:
table
也支持通过字符串或其他类型的值作为键进行快速查找,类似于哈希表。 - 数组和字典的组合:
table
可以同时作为数组和字典使用。数组特性使得它适合存储有序的元素,而字典特性则适合存储键值对。 - 字段和索引:在
table
中,field
和index
是相同的概念,都可以用来引用table
中的元素。 - 函数字段:
table
可以包含函数,这些函数称为方法。 在 Lua 中,table
的创建和使用非常简单。下面是一个创建并使用table
的例子:
Lua
-- 创建一个空的table
local myTable = {}
-- 向table中添加元素
myTable["key1"] = "value1"
myTable[1] = "value2"
myTable[3] = "value3"
-- 访问table中的元素
print(myTable["key1"]) -- 输出 "value1"
print(myTable[1]) -- 输出 "value2"
print(myTable[3]) -- 输出 "value3"
-- 修改table中的元素
myTable["key1"] = "newValue1"
-- 删除table中的元素
myTable[1] = nil
-- 获取table的长度
print(#myTable) -- 输出 2
在这个例子中,myTable
是一个 table
,我们向其中添加了几个键值对,并展示了如何访问、修改和删除 table
中的元素。
table
是 Lua 编程中非常强大和灵活的数据结构,适用于多种数据存储需求。
转换
json:T2J
将 Lua 的表转转为 JSON String
Lua
local s = applib:T2J({
temp = i,
humi = 13.45
})
print(s)
json:J2T
将 JSON String 转为 Lua 的表
Lua
local t = applib:J2T('{"k": "v"}')
print(t.k)
高级示例
下面给出一个把 Modbus 数据数据上传到 MQTT Broker 的实例:
Modbus 采集上来的数据格式如下:
JSON
{
"tag": {
"tag": "tag", // 标签
"function": 1, // 功能码
"slaverId": 1, // 从机 ID
"address": 1, // 地址
"quantity": 1, // 数量
"value": "3.14" // 值
}
}
编写处理脚本:
Lua
Actions = {
function(args)
local dataT, err = json:J2T(args)
if (err ~= nil) then
Throw(err)
return true, args
end
for _, value in pairs(dataT) do
local params = {}
params[value['tag']] = value.value
local json = json:T2J({
id = time:TimeMs(),
method = "thing.event.property.post",
params = params
})
local err = data:ToMqtt("", json)
if err ~= nil then
Throw(err)
end
end
return true, args
end
}