多层JSON的cjson.decode()

时间:2016-02-01 17:39:13

标签: lua nodemcu cjson

我想将多层json对象解码为表并打印" temp"的值。

p=666
d=23.42
payload='{"d":
             {"pres":'..(p)..',"temp":'..(d)..'}
         }'

t = cjson.decode(payload)

我的第一个想法是这样的:

print(t["d"]["temp"])

但是这没用。如何改进此代码以便使用Lua-CJson正确解码?

1 个答案:

答案 0 :(得分:2)

您不能在带引号的字符串中使用换行符。

有两种解决方案:

  • '...'删除换行符。

    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)

如果您的字段不是全局变量,请将它们放在表中并使用该表而不是_G