Lua中保存解码JSON值

以下脚本描述了通过MQTT接收到的JSON对象的解码。在本例中,我们将以以下JSON对象为例:

{"00-06-77-2f-37-94":{"publish_topic":"/stations/test","sample_rate":5000}}

在被接收并在handleOnReceive函数中解码后,会调用已解码对象的本地函数saveTable,它看起来像这样:

["00-06-77-2f-37-94"] = {
    publish_topic = "/stations/test",
    sample_rate = 5000
  }

saveTable函数的目标是遍历上述表格并将"/stations/test"和5000分别赋值给变量pubtop和rate。但是,当我分别打印这两个变量时,两种情况下都返回nil。 我该如何提取此表格的值并将它们保存在所提到的变量中?

如果我只能首先保存值"publish_topic = "/stations/test""和"sample_rate = 5000",那么我需要解析这些值才能获取上述值并保存它们,还是有其他方法?

local pubtop
local rate

local function saveTable(t)
  local conversionTable = {}

  for k,v in pairs(t) do
    if type(v) == "table" then
      conversionTable [k] = string.format("%q: {", k)
      printTable(v)
      print("}")
    else
      print(string.format("%q:", k) .. v .. ",")
    end
  end

  pubtop = conversionTable[0]
  rate = conversionTable[1]
end

local lua_value

local function handleOnReceive(topic, data, _, _)
  print("handleOnReceive: 主题 '" .. topic .. "' 消息 '" .. data .. "'")
  print(data)
  lua_value = JSON:decode(data)

  saveTable(lua_value)

  print(pubtop)
  print(rate)
end
client:register('OnReceive', handleOnReceive)

先前在主题中的问题:解码和解析JSON到Lua

点赞
用户2858170
用户2858170

我给你的函数是用于递归打印表格内容的,它并不是用来获取特定值的。 你的修改没有任何意义。为什么要将那个字符串存储在 conversionTable[k] 中呢?很显然你不知道自己在做什么。不冒犯你,但你应该在继续之前学习一些基础知识。

我给你那个函数是为了让你可以打印出你的 JSON 解码结果。

如果你知道你得到了预期的结果,那么就没有必要通过递归迭代来遍历这个表格了。

只需像这样做

for k,v in pairs(lua_value) do
  print(k)
  print(v.publish_topic)
  print(v.sample_rate)
end

现在请阅读 Lua 参考手册并做一些入门教程。 如果你不知道如何访问表格元素,那么试图实现那样的东西就是在浪费大量的时间和资源。这就像是在 Lua 中最基本且重要的操作。

2021-02-14 14:31:17