如何接收和显示从本地服务器发送的JSON数据?我的意思是Lua中的脚本在ESP8266版本01上发射。最后,我想通过I2C在附加的LCD 2x16到ESP8266上显示数据。
我想将ESP-01连接到webapi服务器,该服务器以JSON动态发送包含不同信息的数据。我希望此信息显示在连接到ESP的LCD上。我不知道如何解码JSON数据。服务器地址为192.168.1.8:8057/api
。
行。我试试这个:
sk=net.createConnection(net.TCP, 0)
sk:on("receive", function(sck, c)
d = c
end )
sk:connect(8095,"192.168.1.8")
sk:send("GET /api/ HTTP/1.1\r\nHost: 192.168.1.8\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
print(d)
并显示结果:
{"lowVersion":1,"highVersion":3}
如果我尝试:
sk=net.createConnection(net.TCP, 0)
sk:on("receive", function(sck, c)
d = c
end )
sk:connect(8095,"192.168.1.8")
sk:send("GET /api/ HTTP/1.1\r\nHost: 192.168.1.8\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
local t = cjson.decode(d) -- this is line 10
print(t.lowVersion)
显示:
test.lua:10: Expected value but found invalid token at character 1
如何从JSON显示值“lowVersion”或“highVersion”?
答案 0 :(得分:0)
所以,整个问题归结为你的cjson.decode()
失败的原因?这是因为你的服务器似乎没有返回有效的JSON。
以下两个示例都可以在dev
分支的最新NodeMCU固件上正常工作。
local t = cjson.decode('{"lowVersion":1,"highVersion":3}')
print(t.lowVersion)
http.get("http://httpbin.org/get", nil, function(code, data)
if (code < 0) then
print("HTTP request failed")
else
local t = cjson.decode(data)
for k,v in pairs(t) do print(k,v) end
end
end)
收益率
1
args table: 3fff0618
url http://httpbin.org/get
origin xxx.71.91.xxx
headers table: 3fff0a88
因此,您的服务器似乎不会一直返回{"lowVersion":1,"highVersion":3}
,或者它可能会返回某些不可见但无效的字符。