当前位置:  开发笔记 > 编程语言 > 正文

如何将字符串对添加到rapidjson的文档中

如何解决《如何将字符串对添加到rapidjson的文档中》经验,为你挑选了1个好方法。

我想使用rapidjson创建一个json字符串.但是我收到了一个错误:无法转换std::stringrapidjson::Type.

int x = 111;
string className = "myclass";

Document doc;
auto& allocator = doc.GetAllocator();

doc.AddMember("x", Value().SetInt(x), allocator);
doc.AddMember("className", className, allocator);

unordered_map& map = sprite->toMap();
for (const auto& pair : map) {
    Value key(pair.first.c_str(), pair.first.size(), allocator);
    doc.AddMember(key, pair.second, allocator);
}

StringBuffer sb;
Writer writer(sb);

doc.Accept(writer);
log("json string: %s", sb.GetString());

Milo Yip.. 10

如果#define RAPIDJSON_HAS_STDSTRING 1(在包含rapidjson头文件之前,或在编译标志中定义),还有一些额外的API std::string.

要制作"复制字符串"(分配重复的源字符串)std::string,可以使用带有allocator的构造函数:

for (auto& pair : map) {
    rapidjson::Value key(pair.first, allocator);
    rapidjson::Value value(pair.second, allocator);
    doc.AddMember(key, value, allocator);
}

或者使它成为一个声明:

for (auto& pair : map)
    doc.AddMember(
        rapidjson::Value(pair.first, allocator).Move(),
        rapidjson::Value(pair.second, allocator).Move(),
        allocator);

如果你假设字符串的生命周期长于doc,那么你可以使用"const-string",这样更简单,更有效:

for (auto& pair : map)
    doc.AddMember(
        rapidjson::StringRef(pair.first),
        rapidjson::StringRef(pair.second),
        allocator);

我认为RAPIDJSON_HAS_STDSTRING应该更好地记录宏...



1> Milo Yip..:

如果#define RAPIDJSON_HAS_STDSTRING 1(在包含rapidjson头文件之前,或在编译标志中定义),还有一些额外的API std::string.

要制作"复制字符串"(分配重复的源字符串)std::string,可以使用带有allocator的构造函数:

for (auto& pair : map) {
    rapidjson::Value key(pair.first, allocator);
    rapidjson::Value value(pair.second, allocator);
    doc.AddMember(key, value, allocator);
}

或者使它成为一个声明:

for (auto& pair : map)
    doc.AddMember(
        rapidjson::Value(pair.first, allocator).Move(),
        rapidjson::Value(pair.second, allocator).Move(),
        allocator);

如果你假设字符串的生命周期长于doc,那么你可以使用"const-string",这样更简单,更有效:

for (auto& pair : map)
    doc.AddMember(
        rapidjson::StringRef(pair.first),
        rapidjson::StringRef(pair.second),
        allocator);

我认为RAPIDJSON_HAS_STDSTRING应该更好地记录宏...

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有