lua中 cjson 中decode在解析错误json字符串格式时会崩溃如何避免
时间: 2024-04-29 19:26:25 浏览: 310
JSON.parse 解析字符串出错的解决方法
5星 · 资源好评率100%
这个问题可以通过在调用 cjson 的 decode 方法之前先检查字符串格式是否正确来避免。可以使用 pcall 函数来在解析错误的情况下不让程序崩溃,而是返回 nil 和错误信息的元组。例如:
```
local cjson = require("cjson")
local function decode_json_str(json_str)
local obj, err = nil, nil
if type(json_str) ~= "string" then
return obj, "json_str is not a string"
end
-- 先检查 json_str 格式是否正确
if pcall(function() obj = cjson.decode(json_str) end) then
return obj, nil
else
return nil, "json_str decode error: " .. tostring(err)
end
end
```
这个示例在解析前先检查了 json_str 是否为字符串类型,并使用 pcall 包装了 decode 方法,如果解析出错,则返回 nil 和错误信息。在使用上述函数时,只需要传入需要解析的字符串即可,例:
```
local obj, err = decode_json_str('{"name":"John", "age":30, "city":"New York"}')
if err then
print("解析出错:", err)
else
print("姓名:", obj.name)
print("年龄:", obj.age)
print("城市:", obj.city)
end
```
阅读全文