如何将字符串对添加到rapidjson的文档中
How can I add string pairs to a document of 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
的"复制字符串"(已分配的源字符串的副本),可以使用带有分配器的构造函数:
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.我应该在创建doc
之后调用doc.SetObject();
2.如何在rapidjson中创建字符串。
Document doc;
doc.SetObject();
auto& allocator = doc.GetAllocator();
rapidjson::Value s;
s = StringRef(className.c_str());
doc.AddMember("className", s, allocator);
auto& map = sprite->toJson();
for (auto& pair : map) {
rapidjson::Value key(pair.first.c_str(), pair.first.size(), allocator);
rapidjson::Value value(pair.second.c_str(), pair.second.size(), allocator);
doc.AddMember(key, value, allocator);
}
应该有更好的方法。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何在文档文件夹中创建目录
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 关于类的 Python 文档 - 对C++的引用不正确
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- RapidJSON 文档创建嵌套对象
- 从 Rapidjson 值转换为 Rapidjson 文档
- Rapidjson将密钥值从一个文档对象分配到另一个文档对象
- rapidjson:如何将文档对象拆分为较小的文档对象
- 如何在文件中添加Rapidjson ::文档
- 在使用 RapidJSON 解析文档时跳过某些字段
- RapidJSON:使用文档或编写器构建之间的差异
- 如何将字符串对添加到rapidjson的文档中
- rapidjson:用于从文件中读取文档的工作代码
- 如何将RapidJSON文档序列化为字符串
- Rapidjson:在文档中添加外部子文档
- 比较rapidjson:文档
- Rapidjson返回对文档值的引用