使用了一段时间rapidjson 库,经常会遇到程序退出(crashed)的现象,主要是没有做好解析过程中的出错处理。本文谈谈这方面的问题。
parse 后判是否出错
使用HasParseError()方法,例如:
#include "rapidjson/document.h"
#include "rapidjson/error/en.h"
Document d;
d.Parse(json);
if (d.HasParseError()) {
fprintf(stderr, "\nError(offset %u): %s\n",
(unsigned)d.GetErrorOffset(),
GetParseError_En(d.GetParseError()));
// ...
}
取值先判类型,
在 GetX 之前,要判断IsX
例如
if(d[“id”].isInt())
int id= d[“id”].GetInt();
取元素先判是否存在
使用hasmember()。
例如:
if (d.HasMember(“id”)
{
if(d[“id”].isInt())
int id= d[“id”].GetInt();
}
对象的判断(IsObject() )
例如:
{“name”:”david”}sdsd
这样的字符串
使用HasParseError()方法无发查出错误,程序直接崩溃!
要 req.IsObject() 来判断字符串是否是一个完整的对象。
要做出一个万无一失的检查程序还比较麻烦的。