0

私はjsoncppを使ってjsonファイルを読み書きしています。

書き込みには、人間が読める形式で json を書き込む StyledWriter を使用します。

現在、int の配列を json ファイルに書き込もうとしています。ドキュメントには、配列値を書き込むための次の規則が記載されています。

  • 空の場合は、インデントと改行なしで [] を出力します
  • 配列にオブジェクト値、空の配列、またはその他の値の型が含まれておらず、すべての値が 1 行に収まる場合は、配列を 1 行に出力します。
  • それ以外の場合、値が 1 行に収まらない場合、または配列にオブジェクトまたは空でない配列が含まれている場合は、1 行に 1 つの値を出力します。

私が書き込もうとしている配列は 1 行には大きすぎるため、上記の規則に従って、ライターは 1 行に 1 つの値を出力し、json を醜く読みにくくします。配列全体を 1 行または複数行に分けて、1 行に複数の値を書き込むことをお勧めします。

jasoncpp はオープンソースであるため、ライターを変更してやりたいことを実行できるという事実を認識していますが、それを行う別の方法があるかどうか疑問に思っています。おそらく、FastWriter (1 行の json を作成する) と StyledWriter の両方を使用していますか?

4

2 に答える 2

1

次のように FastWriter を使用する必要があります。

Json::Value your_json(Json::objectValue);
//init your json...
Json::FastWriter fastWriter;
fastWriter.write(your_json)
于 2015-09-20T07:27:22.513 に答える
-1

json_writer.cpp を見てください - 2 つの 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_;
}
于 2013-06-07T08:20:55.557 に答える