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

近段时间,有时候程序会崩溃,郁闷。

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

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

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

json库的头文件

源文件列表:

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一个异常出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值