Search code examples
rapidjson

Writing rapidjson document to a file using PrettyWriter


I have been unable to find a direct answer to this question. After searching for some time, I've written the following code but I'm sure that there exists a simpler way of doing the same task.

int persistJSONChanges(rapidjson::Document& fa_cloneDoc, string jsonFilePath)
{
        FILE* lp_file = fopen(jsonFilePath.c_str(), "w");
        rapidjson::StringBuffer buffer;
        rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
        fa_cloneDoc.Accept(writer);

        string temp=buffer.GetString();
        unique_ptr<char[]>l_writeBuffer(new char[temp.size()]);
        rapidjson::FileWriteStream l_writeStream(lp_file, l_writeBuffer.get(), temp.size());
        rapidjson::PrettyWriter<rapidjson::FileWriteStream> l_writer(l_writeStream);
        bool l_returnStatus=fa_cloneDoc.Accept(l_writer);
        if(l_returnStatus==false)
        {
                cout<<endl<<"file update failed"<<endl;
                return -1;
           }
        fclose(lp_file);
        return 0;
}

Solution

  • I think you misused the FileWriteStream. It just needs a buffer of arbitrary size.

    You simply needs:

    FILE* fp = fopen(...);
    char buffer[1024];
    FileWriteStream fs(fp, buffer, sizeof(buffer));
    PrettyWriter<FileWriteStream> writer(fs);
    document.Accept(writer);
    fclose(fp);