【发布时间】:2018-07-19 22:04:06
【问题描述】:
我刚刚开始使用 RapidJSON;目前,我有一个字符串的 STL 映射;我想将其表示为 JSON。
到目前为止,我已经做到了:
using JSONDocument = rapidjson::GenericDocument<rapidjson::UTF8<>>;
using JSONValue = rapidjson::GenericValue<rapidjson::UTF8<>>;
JSONDocument jsonRoot(rapidjson::kArrayType);
for (auto const &kv : localeMap) {
std::string key = kv.first;
std::replace(key.begin(), key.end(), ' ','_');
boost::to_lower(key);
JSONValue k(rapidjson::kObjectType);
JSONValue v(rapidjson::kObjectType);
k.SetString(key,jsonRoot.GetAllocator());
v.SetString(kv.second,jsonRoot.GetAllocator());
JSONValue kv_(rapidjson::kObjectType);
kv_.AddMember(k,v,jsonRoot.GetAllocator());
jsonRoot.PushBack(kv_, jsonRoot.GetAllocator());
}
它有效,但对我来说这看起来非常笨拙。我不知道是否有更好/更短/更高性能的方法来执行此操作...我尝试了几种尝试在适当位置创建对象的变体,但它们要么不编译,要么在运行时崩溃。
有什么提示吗?
【问题讨论】:
-
你被 RapidJSON 锁定了吗? nlohmann::json 使它成为 really easy
-
你试过ThorsSerializer你不需要写任何代码来序列化一个std::map。
标签: c++ json loops iterator rapidjson