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
}