Тестирование, если дерево свойств boost хранит примитив или поддерево

Я анализирую файл JSON, в котором значение, соответствующее ключу, может быть примитивом (строкой) или поддеревом. Полезно, например, для хранения информации о людях с одним работодателем, например

{
    "employer" : "NASA";
}

или люди с несколькими работодателями, например

{
    "employer" :
    {
        "weekdays" : "Taco Bell" ,
        "weekends" : "Google Inc"
    }
}

При синтаксическом анализе ключа работодателя мне нужно проверить, хранит ли значение его дерева свойств примитив (один работодатель) или поддерево (несколько работодателей). я пробовал get_value_optional как показано ниже, но я все еще получаю инициализированный employerName это пустая строка. Есть ли другой способ пойти по этому поводу.

boost::optional<std::string> employerName = propertyTree.get_value_optional<std::string>();
if( employerName.is_initialized() )
{
    std::string name = employerName.get(); // returns empty string if propertyTree stores a subtree
}

1 ответ

Решение

Нашел ответ: propertyTree.size(),

Другие вопросы по тегам