使用 rapidjson 直接在文件中保存 json



我是Java程序员,我正在为我的个人项目学习解析器比特币核心C++,我的解析器将文件dat bitcoin上的信息转换为json文件。

现在我的问题是当我在 StringBuffer 上使用 Writer 使用 rapidjson 创建大 json 时

这是我的DAO的一个简单的例子

void DAOJson::serializationWithRapidJson(Person &person) {
    rapidjson::StringBuffer s;
    rapidjson::Writer<rapidjson::StringBuffer> writer(s);
    person.toRapidJson(writer);
    unique_ptr<string> json(new string(s.GetString()));
    cout << *json;
    ofstream stream(DIR_HOME + "dump_rapidJson_test.json");
    stream << *json;
    json.reset();
    stream.close();
}

我的问题是

是否可以使用 rapidjson 在文件而不是字符串上创建 json? 因为我必须保存我的记忆

我想要的代码示例

rapidjson::Writer<rapidjson::FileWriter> writer(s);

是的,您确实有OStreamWrapper

#include <rapidjson/ostreamwrapper.h>
#include <rapidjson/writer.h>
#include <fstream>
void f(auto person)
{
    std::ofstream stream(DIR_HOME + "dump_rapidJson_test.json");
    rapidjson::OStreamWrapper osw(stream);
    rapidjson::Writer<rapidjson::OStreamWrapper> writer(osw);
    person.toRapidJson(writer);
}

如果我是你,我会定义一个运算符:

std::ofstream operator<<(std::ofstream& os, Person const& person)
{
    rapidjson::OStreamWrapper osw(os);
    rapidjson::Writer<rapidjson::OStreamWrapper> writer(osw);
    person.toRapidJson(writer);
    return os;
}
// usage (e.g.):
std::ofstream out("tmp");
Person alice, bob;
out << "Alice: " << alice << "nBob: " << bob;

你还有一个与 C 兼容的变体:rapidjson::FileWriteStream ,但它无论如何都需要一个缓冲区。

#include <rapidjson/filewritestream.h>
#include <rapidjson/writer.h>
#include <cstdio>
void f(auto person)
{
    // output file (a la C)
    FILE* fp = std::fopen("output.json", "wb"); // non-Windows use "w"
    // writer to file (through a provided buffer)
    char writeBuffer[65536];
    rapidjson::FileWriteStream os(fp, writeBuffer, sizeof(writeBuffer));
    rapidjson::Writer<rapidjson::FileWriteStream> writer(os);
    // write
    person.toRapidJson(writer);
    std::fclose(fp);
}

最新更新