Как избежать хранения объектов rapidjson :: Document :: AllocatorType? - PullRequest
0 голосов
/ 31 мая 2019

В моем проекте я использую 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, как вы избежали проблемы?

...