使用Rapidjson在文件中写入

Write in file using Rapidjson

本文关键字:文件 Rapidjson 使用      更新时间:2023-10-16

如何使用Rapidjson文档将一些数据写入文件:

这是我需要写的:

"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]   }
             ]

一旦获得字符串,将其写入文件就像std::ofstream (path) << string一样容易。

这是将json写入文件的示例:

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!");

如果要避免双重延误,则可以直接写入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);

还有filewritestream。

来自官方文档:filewritestream

创建JSON文档:

...通过解析:

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);

...或通过编程设置值创建值:

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

并写入文件:

#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);