gpt4 book ai didi

c++ - RapidJSON/C++ : Better ways to create objects/arrays?

转载 作者:行者123 更新时间:2023-11-30 04:58:58 24 4
gpt4 key购买 nike

我刚刚开始使用 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());
}

它确实有效,但对我来说这看起来非常笨重。我不知道是否有更好/更短/更高性能的方法来执行此操作...我尝试了几种尝试就地创建对象的变体,但它们要么不编译,要么在运行时崩溃。

有什么提示吗?

最佳答案

        JSONValue k(rapidjson::kObjectType);
JSONValue v(rapidjson::kObjectType);
k.SetString(key,jsonRoot.GetAllocator());
v.SetString(kv.second,jsonRoot.GetAllocator());

可以简化为:

        JSONValue k(key, jsonRoot.GetAllocator());
JSONValue v(kv.second, jsonRoot.GetAllocator());

为了提高性能,您可以在多个 PushBack() 之前保留数组类型的大小:

jsonRoot.Reserve(localMap.size(), jsonRoot.GetAllocator());

如果您只需要一个 JSON,您可以改用 SAX API (rapidjson::Writer)。

关于c++ - RapidJSON/C++ : Better ways to create objects/arrays?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432348/

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