我已采用LuaJSON来解析JSON。解析调用似乎是这样的:
-- file.lua
local res = json.decode.decode(json_str)
if res == nil then
throw('invalid JSON')
end
...
但如果json_str
格式不正确,decode()
将在LuaJSON内停止并中断 file.lua 的执行。我希望控制流改为返回我的函数,因此我可以提供自定义错误通知。
我浏览过LuaJSON API,并且没有类似回调的错误处理。我想知道是否有任何Lua机制允许我处理 file.lua 中LuaJSON内发生的错误?
答案 0 :(得分:9)
这里的问题是decode
函数遇到错误时会调用error
。
这是Lua等同于异常处理机制。您要执行的操作是调用protected mode中的decode
功能:
local success, res = pcall(json.decode.decode, json_str);
if success then
-- res contains a valid json object
...
else
-- res contains the error message
...
end
答案 1 :(得分:0)
在您的示例中,如果您使用的是CJSON版本2.1.0,则会有一个新的“cjson.safe”模块,如果在编码或解码过程中发生任何异常,它将返回nil和错误消息。
local decoder = require("cjson.safe").decode
local decoded_data, err = decoder(data)
if err then
ngx.log(ngx.ERR, "Invalid request payload:", data)
ngx.exit(400)
end