微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想使用rapidjson创建一个json字符串.但我收到一个错误:无法将std :: string转换为rapidjson :: 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<string,string>& 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<StringBuffer> writer(sb);

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

解决方法

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

要创建std :: string的“copy-strings”(分配重复的源代码串),可以使用带有allocator的构造函数

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

或者使它成为一个声明:

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

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

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

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

原文地址:https://www.jb51.cc/c/119444.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐