【发布时间】: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)
【问题讨论】: