使用 sjson.decode() 在 NodeMCU Lua 中检测格式错误的 JSON
Detecting malformed JSON in NodeMCU Lua using sjson.decode()
在 ESP-12S 上使用 NodeMCU(最新版本)
我正在尝试解析用户提供的 JSON 并对其进行处理。
但是,因为 JSON 是 用户提供的 ,我不能保证它的有效性。所以我想先检查输入 JSON 是否格式错误,然后再继续。
我是使用以下代码:
function validatejson(input)
if sjson.decode(input) then
return true
end
end
所以一个成功的例子是:
x = '{"hello":"world"}'
print(validatejson(x))
--> true
一个不成功的例子是:
x = '{"hello":world"}'
print(validatejson(x))
--> nil
上述功能有效,但是,在我编译的代码中使用它时,它遇到 PANIC 错误并重新启动:
PANIC: unprotected error in call to Lua API: Incomplete JSON object passed to sjson.decode
因此,正如您可能也做过的那样,我决定使用 pcall()
函数,该函数将 returns 错误作为布尔值(false 表示调用中没有错误) :
function validatejson(input)
if not pcall(sjson.decode(input)) then
return true
end
end
仍然没有运气! :(
关于如何使用 NodeMCU 在 Lua 中成功检测格式错误的 JSON 有什么想法吗?
if not pcall(sjson.decode(input)) then
return true
end
这是错误的:您只是在 sjson.decode(input)
的结果上调用 pcall
,所以错误会在 pcall
之前发生。正确的做法是:
local ok, result = pcall(function()
return sjson.decode(input)
end)
return ok -- might as well return result here though
在 ESP-12S 上使用 NodeMCU(最新版本)
我正在尝试解析用户提供的 JSON 并对其进行处理。 但是,因为 JSON 是 用户提供的 ,我不能保证它的有效性。所以我想先检查输入 JSON 是否格式错误,然后再继续。
我是使用以下代码:
function validatejson(input)
if sjson.decode(input) then
return true
end
end
所以一个成功的例子是:
x = '{"hello":"world"}'
print(validatejson(x))
--> true
一个不成功的例子是:
x = '{"hello":world"}'
print(validatejson(x))
--> nil
上述功能有效,但是,在我编译的代码中使用它时,它遇到 PANIC 错误并重新启动:
PANIC: unprotected error in call to Lua API: Incomplete JSON object passed to sjson.decode
因此,正如您可能也做过的那样,我决定使用 pcall()
函数,该函数将 returns 错误作为布尔值(false 表示调用中没有错误) :
function validatejson(input)
if not pcall(sjson.decode(input)) then
return true
end
end
仍然没有运气! :(
关于如何使用 NodeMCU 在 Lua 中成功检测格式错误的 JSON 有什么想法吗?
if not pcall(sjson.decode(input)) then
return true
end
这是错误的:您只是在 sjson.decode(input)
的结果上调用 pcall
,所以错误会在 pcall
之前发生。正确的做法是:
local ok, result = pcall(function()
return sjson.decode(input)
end)
return ok -- might as well return result here though