Как преобразовать изменяющийся JSON объект? С++
Проблема в том, что мне на вход программы приходит, например, такой JSON-объект:
{
"objectName":"Clock",
"text":"228:1337",
"child":
{
"objectName":"Timer",
"milliseconds":"1212121212"
}
}
Я хочу преобразовать этот JSON в 2 объекта: Clock и ему задать внутреннюю переменную-член Timer:
class Clock
{
private:
Timer m_timer;
}
Проблема в том, что в этом JSON может и не быть поля child. Как тогда сконструировать объект Clock, если Timer не из чего конструировать? Вариант с инициализацией по умолчанию кажется сомнительным, потому что у Timer, например, есть значение milliseconds. Если мы сконструируем в случае отсутствия в JSON поля child объект Timer по умолчанию, то не сможем понять, milliseconds равны нулю или просто объект отсутствовал.
Сейчас я рассматриваю вот такой вариант решения проблемы:
class Clock
{
private:
std::optional<Timer> m_timer;
}
Но это решение мне не кажется правильным и красивым, скорее на костыль похоже. Тем более, если в классе много полей, которые могли бы отсутствовать.
Еще я рассматриваю вариант сохранения в классе не самого объекта Timer, а указателя на него и указания nullptr в случае, когда объекта в JSON не оказалось. Но в таком случае для цепочки объектов придется каждый раз проверять указатель на nullptr, что делает невозможным использование таких конструкций:clock->timer->milliseconds->int_value()
Идеальным решением было бы использование шаблонов, чтобы некоторые поля отсутствовали у объекта в случае, если их нет в JSON, но JSON считывается в рантайме, так что этот способ тоже не подходит.
Какой вариант лучше всего и есть ли какие-то более спортивные варианты решения проблемы отсутствия объекта в JSON?