使用jsoncpp的StyledWriter在一行中写一个大数组

时间:2012-07-03 10:59:57

标签: c++ json jsoncpp

我正在使用jsoncpp来读写json文件。

为了写作,我使用StyledWriter,它以人类可读的方式编写json。

目前,我正在尝试将一个int数组写入json文件。该文档描述了编写数组值的以下规则:

  
      
  • 如果为空则打印[]而不缩进和换行
  •   
  • 如果数组不包含对象值,空数组或其他一些值类型,并且所有值都适合一行,则将数组打印在一行上。
  •   
  • 否则,如果值不适合一行,或者数组包含object或非空数组,则每行打印一个值。
  •   

由于我尝试编写的数组对于一行来说太大了,根据上面的规则,编写器每行打印一个值,这使得我的json丑陋且可读性较差。我希望它将整个数组写成一行或几行,每行有几个值。

我知道jasoncpp是开源的,因此我可以改变作者做我想要的, 但我想知道是否有不同的方法来做到这一点。也许同时使用FastWriter(创建一行json)和StyledWriter?

1 个答案:

答案 0 :(得分:-1)

查看json_writer.cpp - 两个writeIndent()方法。

void 
StyledStreamWriter::writeIndent()
{
  /*
    Some comments in this method would have been nice. ;-)

   if ( !document_.empty() )
   {
      char last = document_[document_.length()-1];
      if ( last == ' ' )     // already indented
         return;
      if ( last != '\n' )    // Comments may add new-line
         *document_ << '\n';
   }
  */
//Removing indent and line feed!!!   *document_ << '\n' << indentString_;
}

void 
StyledWriter::writeIndent()
{
   if ( !document_.empty() )
   {
      char last = document_[document_.length()-1];
      if ( last == ' ' )     // already indented
         return;
//Removing indent and line feed!!!      if ( last != '\n' )    // Comments may add new-line
//Removing indent and line feed!!!         document_ += '\n';
   }
   document_ += indentString_;
}