正式には、JSON文字列には「\ n」、「\u20AC」などのエスケープ文字を含めることができます。
これらすべてのケースを処理するには、JSONテキストを解析するためのJSONパーサーが必要になります。
アプリケーションでは、SAXスタイル(イベントベース)のAPIを使用できます。つまり、中間DOM(ドキュメントオブジェクトモデル)を生成せずに、JSONファイルを最初から最後までスキャンします。
SAXスタイルのAPIをサポートするrapidjsonを確認できます。
$ rapidjson :: Writer $を参照してCSVライターを作成し、イベントからCSV文字列を出力できます。コードは次のようになります。
CsvWriter writer(outputStream);
rapidjson::Reader reader;
reader.Parse<0>(inputStream, writer);
次に、リーダーは、入力ストリームの解析中にライターのメンバー関数を呼び出します。あなたの例では、次の順序で関数を呼び出します。
writer.StartArray();
writer.StartArray();
writer.String("Bcode", 5, true);
writer.String("firstname", 9, true);
writer.String("lastname", 8, true);
writer.EndArray();
writer.StartArray();
writer.String("11234", 5, true);
writer.String("richard", 7, true);
writer.String("nixon", 5, true);
writer.EndArray();
writer.EndArray();
String()の2番目のパラメーターは、文字列の長さです。3番目のパラメーターは、文字列を複製する必要があるかどうかを示します。
これらの関数呼び出しを使用して、独自のCSV形式を簡単に書き出すことができます。
最後に、SAXスタイルのAPIを使用すると、必要なメモリ消費量ははるかに少なくなりますが、ハンドラーはDOMバージョンよりも記述が難しい場合があることに注意してください。Rapidjsonは、選択したSAXスタイルとDOMスタイルのAPIの両方をサポートします。