您的位置:首页 > Web前端 > JavaScript

VC中使用json库时的一个-1问题

2017-03-29 14:50 169 查看
近段时间,有时候程序会崩溃,郁闷。

这个问题好找,因为总是在进行月历搜索,即搜索哪些天有录像数据哪些天没有的时候崩溃的,当然不是一定崩溃,而是有时候会崩溃。

通过跟踪发现,在崩溃的时候,是月历搜索结果为空,远程返回了错误。

编译器是vs2010 c++,使用的json库如下图所示,头文件列表:



源文件列表:



正常的搜索结果为:

{“HD”:{“MSG”:5,”TASK”:99418},”PM”:{“RES”:20170320,”ERR”:0,”VEH”:1367}}

此时,经过如下的处理后,只获取 PM 的内容用于月历显示:

Json::Value jsonReq;
Json::Reader jsonReader;
if (!jsonReader.parse(pMsgBuf, jsonReq))
{
MyLog("client parse json failed:%s.", pMsgBuf);
return 0;
}
Json::FastWriter fastWriter;
std::string jsonStr = fastWriter.write(jsonReq["PM"]);
// jsonStr就是取得的 "PM" 值


取出的结果为 {“RES”:20170320,”ERR”:0,”VEH”:1367}

而当搜索结果为空时,如下所示:

{“HD”:{“MSG”:5,”TASK”:99418},”PM”:{“RES”:null,”ERR”:4294967295,”VEH”:1367}}

其中的 4294967295 实际为-1的无符号数,原本远程应该传过来-1,但是变成了这个大整数。

在经过以上的代码段取出的“PM”结果jsonStr值就变成了下面的样子:

{“RES”:null,”ERR”:4294967295.0,”VEH”:1367}}

这在后面程序解析这个串后获取“ERR”值时,原本以整数来取的,现在变成了浮点数,从而导致失败,由于没有加try … catch …,所以程序崩溃。

除了这种情况,这个json库对数据的处理太不灵活,数据类型稍有对不上,就throw一个异常出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vc json