Json数据日志打印小技巧

标签: 常用小工具  json  log  json打印

     通常涉及到网络通信一般都比免不了涉及到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返回的字符串就行了.(需要注意的是,这个函数会改变原始字符串,所以用的时候最好用一个中间变量).结果如图:

 

原文链接:加载失败,请重新获取