通常涉及到网络通信一般都比免不了涉及到json字符串.最近在使用jsoncpp库做开发时,在日志打印这块儿有些头疼,json字符串本身自带格式,即使序列化之后也会出现很多的"\t""\n"等转意字符.如图:
为了一屏多显示内容,我们需要去掉json的数据格式,可又不能影响其数据内容.因此需要对json数据做一些处理. 代码部分如下:
/*----------------------------------------------------------------------
- @Name:
- @Discrible:
- @Param:
- @Return:
- @Others:
-----------------------------------------------------------------------
- @Recode date version author modify
- ------------------------------------------------------------------
- 20190808 V1.0 VINCENT Create
-
------------------------------------ CLASS-----------------------------------*/
bool GetCharIsTrue(char data)
{
switch(data)
{
case '\t':
case '\n':
case '\r':
case ' ':
{
return true;
}
default:return false;
}
}
/*----------------------------------------------------------------------
- @Name:
- @Discrible:
- @Param:
- @Return:
- @Others:
-----------------------------------------------------------------------
- @Recode date version author modify
- ------------------------------------------------------------------
- 20190808 V1.0 VINCENT Create
-
------------------------------------ CLASS-----------------------------------*/
std::string JsonNoFat(std::string json_str)
{
json_str.erase(std::remove_if(json_str.begin(), json_str.end(),&GetCharIsTrue), json_str.end());
return json_str;
}
函数实现: 实现思路是剔除掉json字符串中产生格式的字符,比如'\t','\r','\n',' ';这样的话,不会影响原始数据的展示也达到了让日志更紧凑的目的.这里实现的核心是erase和remove_if的配合操作.remove_if返回使其为真的迭代器位置,erase删除当前迭代器的值.具体定义查阅esrae()和remove_if()
使用的时候直接调用JsonNoFat返回的字符串就行了.(需要注意的是,这个函数会改变原始字符串,所以用的时候最好用一个中间变量).结果如图: