【问题标题】:Save decoded JSON values in Lua Variables将解码的 JSON 值保存在 Lua 变量中
【发布时间】:2021-02-14 22:31:17
【问题描述】:

以下脚本描述了对通过 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 '" .. topic .. "' message '" .. data .. "'")
  print(data)
  lua_value = JSON:decode(data)

  saveTable(lua_value)

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

上一个问题:Decode and Parse JSON to Lua

【问题讨论】:

    标签: json lua


    【解决方案1】:

    我给你的功能是递归打印表格内容。不必修改以获得某些特定值。 您的修改没有任何意义。为什么要将字符串存储在conversionTable[k] 中?你显然不知道你在这里做什么。无意冒犯,但您应该在继续之前学习一些基础知识。

    我给了你这个函数,所以你可以打印你的 json 解码的任何结果。

    如果你知道你得到了你所期望的,那么递归地遍历那个表是没有意义的。

    就这样吧

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

    现在请阅读 Lua 参考手册并做一些初学者教程。 如果您不知道如何访问表格的元素而试图实现类似的事情,那么您会浪费大量的时间和资源。这就像 Lua 中最基本也是最重要的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 2021-05-16
      • 2015-06-18
      • 1970-01-01
      • 2021-02-09
      • 2018-11-29
      相关资源
      最近更新 更多