5

How can i write some data into file using rapidjson document :

Here is what i need to write :

"Big Node ": [   
              {    "Big Key": "Key Value 1",    "Child Key": "Key Value 1",    "Values": [     1,     3,     4,     1,     2,     3    ]   },
              {    "Big Key": "Key Value 2",    "Child Key": "Key Value 2",    "Values": [     17,     18,     5,     4,     17]   }
             ]
  • And the magical question... What have you tried, and what is your problem *exactly*? There are docs with a [User Guide](http://code.google.com/p/rapidjson/wiki/UserGuide) and examples. And couple of questions on SO on the topic. – luk32 Feb 04 '14 at 13:17
  • 1
    I had a look at the user guide but they didn't give any way to write into file. Write now i added some data inside the file and the only problem is how to such a complex data. In fact as u can see there is an array inside another array .... –  Feb 04 '14 at 13:22

2 Answers2

14

Once you get the string, writing it to a file is as easy as std::ofstream (path) << string.

Here's an example writing JSON to a file:

char cbuf[1024]; rapidjson::MemoryPoolAllocator<> allocator (cbuf, sizeof cbuf);
rapidjson::Document meta (&allocator, 256);
meta.SetObject();
meta.AddMember ("foo", 123, allocator);

typedef rapidjson::GenericStringBuffer<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<>> StringBuffer;
StringBuffer buf (&allocator);
rapidjson::Writer<StringBuffer> writer (buf, &allocator);
meta.Accept (writer);
std::string json (buf.GetString(), buf.GetSize());

std::ofstream of ("/tmp/example.json");
of << json;
if (!of.good()) throw std::runtime_error ("Can't write the JSON string to the file!");

If you want to avoid the double-buffering then you can write directly to ofstream:

struct Stream {
  std::ofstream of {"/tmp/example.json"};
  typedef char Ch;
  void Put (Ch ch) {of.put (ch);}
  void Flush() {}
} stream;

rapidjson::Writer<Stream> writer (stream, &allocator);
meta.Accept (writer);

There's also FileWriteStream.

ArtemGr
  • 11,684
  • 3
  • 52
  • 85
3

From the official doc: FileWriteStream

Create json document:

...by parsing:

const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
Document d;    
d.Parse(json);

... or by setting values programmatically CreateModifyValues:

Document d; 
d.SetObject();
d.AddMember ("Foo", 123, d.GetAllocator());

And write to file:

#include "rapidjson/filewritestream.h"
#include <rapidjson/writer.h>
//...
FILE* fp = fopen("output.json", "wb"); // non-Windows use "w"
 
char writeBuffer[65536];
FileWriteStream os(fp, writeBuffer, sizeof(writeBuffer));
 
Writer<FileWriteStream> writer(os);
d.Accept(writer);
 
fclose(fp);
Nilo nilold
  • 41
  • 1
  • 3