1、在使用jsoncpp的FastWriter类时,发现write函数输入时,自动添加上了一个换行符
原本的86}结尾变成了86}\n结尾,这对于其他的项目的json解析没有问题,但是做base64加密计算,以及sha256,md5运算,或者字符串匹配时,则会有影响,需要严格保持一致
2、解决办法①,对string字符串对去除处理,缺点是需要在每个json转string的地方都加上,代码冗余,也容易遗漏
void func(std::string& str) {
if (!str.empty() && str.back() == '\n') {
str.pop_back();
}
}
3、解决办法②,修改write源码,去掉里面的换行符,当然这个办法,在不了解jsoncpp的源码时,是比较危险的,而且jsoncpp里面的实现也较为复杂,通常不建议
找到jsoncpp_lib的工程,然后在源文件SourceFile目录中,找到FastWrite::Write函数,可以看到376和377行中,这里在文件结尾添加上了\n,将这两行屏蔽掉后,就不会出现添加的问题
屏蔽后,重新生成jsoncpp的dll,lib,然后把include\json文件夹下面的头文件拷贝到工程中,就可以发现json转string最后的换行符已经消失了,如果发现没有消失,可能是没有修改和图片上一样的位置,例如使用的函数为FastWriter::write函数,但是修改源码时,却修改的是StyledWriter::write或者StyledStreamWriter::write
4、同理如果使用python压缩源码的方式,也是直接修改json里面的函数实现即可,屏蔽掉FastWriter::write函数里面换行符相关