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