// JSON pretty formatting example // This example can handle UTF-8/UTF-16LE/UTF-16BE/UTF-32LE/UTF-32BE. // The input firstly convert to UTF8, and then write to the original encoding with pretty formatting. #include "rapidjson/reader.h" #include "rapidjson/prettywriter.h" #include "rapidjson/filereadstream.h" #include "rapidjson/filewritestream.h" #include "rapidjson/encodedstream.h" // NEW #include "rapidjson/error/en.h" #ifdef _WIN32 #include #include #endif using namespace rapidjson; int main(int, char*[]) { #ifdef _WIN32 // Prevent Windows converting between CR+LF and LF _setmode(_fileno(stdin), _O_BINARY); // NEW _setmode(_fileno(stdout), _O_BINARY); // NEW #endif // Prepare reader and input stream. //Reader reader; GenericReader, UTF8<> > reader; // CHANGED char readBuffer[65536]; FileReadStream is(stdin, readBuffer, sizeof(readBuffer)); AutoUTFInputStream eis(is); // NEW // Prepare writer and output stream. char writeBuffer[65536]; FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer)); #if 1 // Use the same Encoding of the input. Also use BOM according to input. typedef AutoUTFOutputStream OutputStream; // NEW OutputStream eos(os, eis.GetType(), eis.HasBOM()); // NEW PrettyWriter, AutoUTF > writer(eos); // CHANGED #else // You may also use static bound encoding type, such as output to UTF-16LE with BOM typedef EncodedOutputStream,FileWriteStream> OutputStream; // NEW OutputStream eos(os, true); // NEW PrettyWriter, UTF16LE<> > writer(eos); // CHANGED #endif // JSON reader parse from the input stream and let writer generate the output. //if (!reader.Parse(is, writer)) { if (!reader.Parse(eis, writer)) { // CHANGED fprintf(stderr, "\nError(%u): %s\n", static_cast(reader.GetErrorOffset()), GetParseError_En(reader.GetParseErrorCode())); return 1; } return 0; }