测试 boost 属性 tree 是否存储原语或子树

Testing if boost property tree stores a primitive or a subtree

我正在解析一个 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
}

找到答案:propertyTree.size()