我需要将未命名的节点添加到 boost::property_tree::ptree 就像它的 JSON 解析器对数组所做的那样。但是,当我想这样做时,我会在运行时得到这样的断言:

  Assertion failed: !p.empty() && "Empty path not allowed for put_child.", file C:\Program Files\Boost\boost\include/boost/property_tree/detail/ptree_implementation.hpp, line 877

我喜欢
tree.add_child(name, child);

其中 tree 和 child 都是 ptree-s 和 name char*。

我怎么能像ptree-s的JSON解析器一样呢?

最佳答案

我不认为 Boost.Property_tree 有充分的理由禁止 add_childput_child 中的空路径。在其内部路径实用程序中实现根检测的方式需要非空路径。

您可以通过在添加数组元素时不使用它们的路径实用程序来解决这个问题。

using boost::property_tree::ptree;
ptree pt;
pt.put_child( "path.to.array", ptree() );
auto& array = pt.get_child( "path.to.array" );
array.push_back( std::make_pair( "", ptree("foo") ) );
array.push_back( std::make_pair( "", ptree("bar") ) );
boost::property_tree::json_parser::write_json( std::cout, pt, false );
// {"path":{"to":{"array":["foo","bar"]}}}

关于c++ - 将未命名的节点添加到 boost::property_tree::ptree,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8096583/

10-11 22:45