Как изменить вложенный объект quickjson на лету? - PullRequest
0 голосов
/ 26 февраля 2019

Все примеры для quickjson, которые я могу найти для вложенных объектов, по существу следующие: 1) создать корневой объект 2) создать вложенный объект 3) построить / добавить вложенный объект (корневой объект до сих пор не изменился) 4) после вложенияобъект завершен, добавить в корневой объект

Что я хочу сделать на высоком уровне: 1) создать корневой объект 2) создать вложенный объект и добавить в корневой объект 3) построить / добавить в вложенный объект (корневой объектпо сути, также обновляется, нет необходимости в дальнейших действиях)

Это так, что если при построении вложенного объекта возникает исключение, шаг по добавлению его в корневой объект уже завершен, поэтому я по крайней мересделать вложенный объект частично построенным, а не полностью отсутствующим.

Возможно ли это?Буду очень признателен за любую помощь или понимание!

1 Ответ

0 голосов
/ 27 февраля 2019

Я смог понять это;однако, поскольку я не нашел документации, подтверждающей это, я не уверен, действительно ли я полагаюсь на какое-либо неопределенное или неподдерживаемое поведение.

//Prepare 'root' object as a document
rapidjson::Document document;
rapidjson::Document::AllocatorType& allocator = document.GetAllocator();
document.SetObject();
// 'document' currently serializes to {}

//Create an empty rapidjson 'object' as a Value, and add it to root
rapidjson::Value nestedObject(rapidjson::kObjectType);
document.AddMember("Parent", nestedObject, allocator);
// 'document' currently serializes to {"Parent":{}}

/*Retrieve the 'object' as a Value
This step is important! Trying to reuse the same 'nestedObject' Value from before
without "re-retrieving" it will result in assertion errors at runtime.
If you try to "re-retrieve" into the existing 'nestedValue' instance, the end
result below will be {"Parent":null}*/
rapidjson::Value &nestedObjectValue = document["Parent"];

//Modify the 'nestedObjectValue'
nestedObjectValue.AddMember("child", "child_value", allocator);
// 'document' currently serializes to {"Parent":{"child":"child_value"}}

В конечном счете, это было желаемое поведение, которое я хотел.У меня есть доступ к вложенному объекту, и я могу изменить его по своему желанию, и изменения повлияют на корневой документ.

...