如何在使用rapidJson

时间:2018-03-27 05:49:59

标签: c++ json rapidjson

如何在C ++字符串中存储阅读器的输出而不是在stdout中打印

请帮我弄清楚字符串中的存储输出。

// JSON condenser example

// This example parses JSON text from stdin with validation, 
// and re-output the JSON content to stdout without whitespace.

#include "rapidjson/reader.h"    
#include "rapidjson/writer.h"   
#include "rapidjson/filereadstream.h"   
#include "rapidjson/filewritestream.h"   
#include "rapidjson/error/en.h"     

using namespace rapidjson;   

int main(int, char*[]) {   
    // Prepare JSON reader and input stream.   
    Reader reader;   
    char readBuffer[65536];   
    FileReadStream is(stdin, readBuffer, sizeof(readBuffer));   

    // Prepare JSON writer and output stream. 

    char writeBuffer[65536];    
    FileWriteStream os(stdout, writeBuffer, 
  sizeof(writeBuffer));    
    Writer<FileWriteStream> writer(os);    

    // JSON reader parse from the input stream and let writer generate the output.   

if (!reader.Parse(is, writer)) {       
        fprintf(stderr, "\nError(%u): %s\n",    static_cast<unsigned>(reader.GetErrorOffset()),    GetParseError_En(reader.GetParseErrorCode()));   
        return 1;  
    }  
//this should work something like
string str = reader.Parse(is, writer);
//no stdout from reader**      
cout<< str <<endl;
//this output will contain json file without whitespaces      

    return 0;       
}

网址:http://rapidjson.org/

1 个答案:

答案 0 :(得分:1)

改编自rapidJSON documentation

#include <iostream>
#include <string>

#include "rapidjson/document.h" 
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
#include "rapidjson/istreamwrapper.h"
#include "rapidjson/ostreamwrapper.h"

using namespace rapidjson;

int main()
{
    Document d;

  // Read from cin
    IStreamWrapper isw(std::cin);
    d.ParseStream(isw);

  // Write to a char * buffer
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);

  // Use the buffer
    std::string theJSON(buffer.getString());

  // Write to cout
    OStreamWrapper osw(std::cout)
    d.Accept(osw);
}