В моем проекте я использую rapidjson для разбора файлов JSON.
Мне нужно загрузить много файлов JSON при запуске приложения, но мне нужно только часть содержимого JSON.
Но, с другой стороны, контент JSON имеет некоторые отношения, то есть я могу свернуть несколько узлов JSON.
// file1.txt
{
"car" : {
"type":"Car",
"wheel":{"ref_type":"Wheel"}
// other properties ...
}
}
// file2.txt
{
"Wheel" : {
"type":"Wheel",
"radius":1.0,
// other properties ...
}
}
Здесь возникает проблема. Как я могу хранить объекты rapidjson :: Document :: AllocatorType?
// Part 1
rapidjson::Document doc1;
doc1.parse("file1.txt");
rapidjson::Document doc2;
doc2.parse("file2.txt");
// Part 2
// collapse json content
doc1["wheel"].RemoveAllMemebers();
for(auto& it : doc2.getObject()) {
doc1["wheel"].AddMember(it.name, it.value, doc1.getAllocator());
}
Если между Part 1
и Part 2
имеется длинный путь, и только часть doc1
сохраняется как rapidjson::Value
объект. Allocator
из doc1
теряется при уничтожении doc1
.
Как я могу использовать такой код, как
// val is part of doc1
// val2 is part of some other rapidjson::Document
// alloc should get by doc1.getAllocator(), but doc1 has already been destroyed
val.CopyFrom(val2, alloc)
Или кто-нибудь включил в свои проекты quickjson, как вы избежали проблемы?