cjson.decode() 多层 JSON
cjson.decode() of a multi layer JSON
我想将多层 json 对象解码为 table 并打印 "temp" 的值。
p=666
d=23.42
payload='{"d":
{"pres":'..(p)..',"temp":'..(d)..'}
}'
t = cjson.decode(payload)
我的第一个想法是这样的:
print(t["d"]["temp"])
但这没有用。我如何改进此代码,使其使用 Lua-CJson 正确解码?
带引号的字符串中不能有换行符。
有两种解决方案:
删除 '...'
中的换行符。
payload='{"d": {"pres":'..(p)..',"temp":'..(d)..'} }'
使用长字符串形式:[[ ... ]
,允许换行。
payload=[[{"d":
{"pres":]]..(p)..',"temp":'..(d)..[[}
}]]
您也可以使用模板,这样更清楚:
p=666
d=23.42
payload=[[
{ "d":
{"pres": (p), "temp": (d)}
}'
]]
payload=payload:gsub("%((.-)%)",_G)
print(payload)
如果您的字段不是全局变量,请将它们放在 table 中并使用 table 而不是 _G
。
直接嵌套 Json 似乎不适用于 cJson(至少在带有 NodeMCU 的 ESP8266 上不适用)我找到了一个解决方案,方法是在嵌套值周围包装一个数组。
p = 666
d = "23.42"
payload='{"d":[{"pres":'..(p)..',"temp":"'..(d)..'"}]}'
t = cjson.decode(payload)
print(t.d[1].temp) -- prints "23.42"
#注1 - 这意味着你必须在调用变量之前对数组进行寻址 t.d[1] - Lua 中的数组以数字 1 开头,并且 NOT 像许多其他脚本语言一样从零开始。
# 注 2 - 出于某种原因,我得到了浮点值(变量 d)的 'Malformed number' 错误。作为一个字符串,该值被无误地解码。我必须将变量设为字符串并将 "double quotation marks" 放在值周围。
--> 啊,我发现我正在开发 nodeMCU 的整数版本——它显然不支持浮点数 ...
我想将多层 json 对象解码为 table 并打印 "temp" 的值。
p=666
d=23.42
payload='{"d":
{"pres":'..(p)..',"temp":'..(d)..'}
}'
t = cjson.decode(payload)
我的第一个想法是这样的:
print(t["d"]["temp"])
但这没有用。我如何改进此代码,使其使用 Lua-CJson 正确解码?
带引号的字符串中不能有换行符。
有两种解决方案:
删除
'...'
中的换行符。payload='{"d": {"pres":'..(p)..',"temp":'..(d)..'} }'
使用长字符串形式:
[[ ... ]
,允许换行。payload=[[{"d": {"pres":]]..(p)..',"temp":'..(d)..[[} }]]
您也可以使用模板,这样更清楚:
p=666
d=23.42
payload=[[
{ "d":
{"pres": (p), "temp": (d)}
}'
]]
payload=payload:gsub("%((.-)%)",_G)
print(payload)
如果您的字段不是全局变量,请将它们放在 table 中并使用 table 而不是 _G
。
直接嵌套 Json 似乎不适用于 cJson(至少在带有 NodeMCU 的 ESP8266 上不适用)我找到了一个解决方案,方法是在嵌套值周围包装一个数组。
p = 666
d = "23.42"
payload='{"d":[{"pres":'..(p)..',"temp":"'..(d)..'"}]}'
t = cjson.decode(payload)
print(t.d[1].temp) -- prints "23.42"
#注1 - 这意味着你必须在调用变量之前对数组进行寻址 t.d[1] - Lua 中的数组以数字 1 开头,并且 NOT 像许多其他脚本语言一样从零开始。
# 注 2 - 出于某种原因,我得到了浮点值(变量 d)的 'Malformed number' 错误。作为一个字符串,该值被无误地解码。我必须将变量设为字符串并将 "double quotation marks" 放在值周围。 --> 啊,我发现我正在开发 nodeMCU 的整数版本——它显然不支持浮点数 ...