6

我采用了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 中发生的错误

4

2 回答 2

9

这里的问题是,如果遇到错误,decode函数就会调用。error

这相当于 Lua 的异常处理机制。您要做的是在保护模式下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
于 2013-06-04T08:53:51.803 回答
1

在您的示例中,如果您使用的是 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
于 2017-09-26T10:08:37.830 回答