如何使用rapidjson :: writer复制rapidjson :: Value?我在使用文档时找到了几种解决方案 - 但在使用编写器时却找不到。
例如为: How can I add members to a rapidjson document using integers as the key/name?
所以,我想要这样的事情发挥作用:
rapidjson::CrtAllocator _crtAllocator;
rapidjson::GenericStringBuffer<rapidjson::UTF8<>> _jsonBuffer;
rapidjson::PrettyWriter<rapidjson::StringBuffer> _jsonWriter;
void GeojsonWriter::addMember(std::string name, rapidjson::Value& value) {
_jsonWriter.AddMember(name, value, _crtAllocator);
}
在我的情况下,一个示例用法是复制&#34;属性&#34; Geojson特征的对象到另一个特征(从不同的几何体创建,但应该被分配一个&#34;原始&#34;属性的副本)
我已经按照以下答案实施了该方法。虽然我在下面访问itr-&gt; name.GetString()时遇到随机崩溃。崩溃导致std字符串...虽然有时相同的数据工作正常。这看起来很像内存分配问题 - 但我没有什么可以看的路径。
这里的std字符串崩溃(尽管可能不太相关): static inline size_t length(const char_type * __s){return strlen(__ s);}
void copyGeojsonProperties(GeojsonWriter &writer, const rapidjson::Value* properties) {
for (rapidjson::Value::ConstMemberIterator itr = properties->MemberBegin(); itr != properties->MemberEnd(); ++itr) {
if (itr->name.IsString()) {
const char* cstr = itr->name.GetString();
if (!cstr || !itr->name.Empty())
continue;
std::string key = itr->name.GetString();
const rapidjson::Value& val = itr->value;
writer.addMember(key, val);
}
}
}
我找到了解决方法。我有多个输入json文档表单,我使用value.CopyFrom(...,document.GetAllocator())。问题是当读取json时文档被释放(我从不同的jsons复制对象,然后将它们写入另一个json)。现在我保留对指针的引用,以防止释放分配器。
虽然即使复制了值也需要保持分配器,但这并不明显。
答案 0 :(得分:1)
如果作者已被称为html, body {
height: 100%;
}
,那么您只需要:
StartObject()