C ++ boost json解析器抑制“No such node”输出

时间:2015-02-27 03:34:42

标签: c++ boost

有没有办法阻止Boost json解析器输出"没有这样的节点"每当传入无效的子位置时到控制台?

jsonNode.get_child("invalid.node.location");

我尝试更改代码,为默认值添加第二个参数,编译器说它是无效参数

Code Snippet(siteTree是另一个ptree),位置节点是JSON中可用的数组:

const ptree& test = siteTree.get_child("location", empty_ptree<ptree>());

错误1:

Function 'empty_ptree' could not be resolved    

错误2:

Invalid arguments '
Candidates are:
boost::property_tree::basic_ptree<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> & get_child(const boost::property_tree::string_path<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,boost::property_tree::id_translator<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> &)
const boost::property_tree::basic_ptree<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> & get_child(const boost::property_tree::string_path<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,boost::property_tree::id_translator<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> &)
boost::property_tree::basic_ptree<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> & get_child(const boost::property_tree::string_path<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,boost::property_tree::id_translator<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> &, boost::property_tree::basic_ptree<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> &)
const boost::property_tree::basic_ptree<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> & get_child(const boost::property_tree::string_path<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,boost::property_tree::id_translator<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> &, const boost::property_tree::basic_ptree<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>> &)'

1 个答案:

答案 0 :(得分:1)

一元ptree::get_child抛出传递无效节点。但是,如果传递的路径无效,则使用两个参数的重载将返回默认值。你可以使用这个重载。或者,ptree::get_child_optional<T>返回boost::optional<T>,如果传递的路径无效,则返回boost::null