gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:39:01 35 4
gpt4 key购买 nike

我想使用 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...

关于c++ - 如何将字符串对添加到 rapidjson 文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573940/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com