项目案例
JSON 解析

JSON 解析

Lua Table

在 Lua 编程语言中,table 是 Lua 中的核心数据结构,它是一种动态的、可变的、关联数组和哈希表的组合。table 在 Lua 中用于存储多种类型的数据,并且是唯一一种可以拥有函数作为字段的结构。 以下是 table 的一些基本特点:

  1. 动态性table 的大小可以在运行时动态地改变。
  2. 可变性table 中的元素可以在运行时被添加、修改或删除。
  3. 索引table 可以通过整数索引访问,类似于数组。
  4. 哈希表table 也支持通过字符串或其他类型的值作为键进行快速查找,类似于哈希表。
  5. 数组和字典的组合table 可以同时作为数组和字典使用。数组特性使得它适合存储有序的元素,而字典特性则适合存储键值对。
  6. 字段和索引:在 table 中,fieldindex 是相同的概念,都可以用来引用 table 中的元素。
  7. 函数字段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
}
© 2023-2025 RHILEX Technologies Inc. All rights reserved.