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 的内容用于月历显示:
取出的结果为 {“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一个异常出来
这个问题好找,因为总是在进行月历搜索,即搜索哪些天有录像数据哪些天没有的时候崩溃的,当然不是一定崩溃,而是有时候会崩溃。
通过跟踪发现,在崩溃的时候,是月历搜索结果为空,远程返回了错误。
编译器是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中一个关于宏的使用问题
- VC中一个关于宏的使用问题
- VC中一个关于宏的使用问题 A2W W2A
- IDE使用问题:vc2003中类型无法转到声明和定义,按F12提示未定义的符号(CSDN一个帖子)
- 这是我学习COM遇到的几个基本问题其解决 黄森堂(vcmfc)著 1.我用ATL生成一个组件对象,我在COM中使用IDD_IEncrypt,这个在哪里写义,是啥?GUID? 答:IDD_IEncry
- VC中一个关于宏的使用问题
- VC中一个关于宏的使用问题
- XP 安装后使用vc2010,进入类视图后,点击一个函数,后vs报错退出问题
- VC中一个关于宏的使用问题
- VC中一个关于宏的使用问题(转载)
- VC中一个关于宏的使用问题,字符串之间转换,宽字符与普通字符
- 在IIS 6 中使用HTTP压缩(Compression)遇到的一个问题
- 请教各位C/VC高手一个极其郁闷的问题
- VC6 Stdio 使用技巧及问题收集(2) zz
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- VC6 Stdio 使用技巧及问题收集(2)
- 【原创】MASM32中使用资源的一个问题
- C#写的计数器控件 - 一个关于相对路径使用的问题
- 使用VC6时:关于WinAPI的版本问题。
- 使用css expression遇到的一个问题