测试提升属性树是存储基元还是子树

Testing if boost property tree stores a primitive or a subtree

本文关键字:存储 属性 测试      更新时间:2023-10-16

我正在解析一个 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() .