C++:如何使用boost :: property_tree创建数组?

Jan*_*ard 15 c++ json boost boost-propertytree

我没有看到使用boost :: property树创建数组的方法.以下代码......

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>

#include <iostream>

int main()
{
  try {
    boost::property_tree::ptree props;
    props.push_back(std::make_pair("foo", "bar"));
    props.push_back(std::make_pair("foo", "baz"));
    boost::property_tree::write_json("prob.json", props);
  } catch (const std::exception & ex) {
    std::cout << ex.what() << std::endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

......只是给了我......

{
  "foo": "bar",
  "foo": "baz"
}
Run Code Online (Sandbox Code Playgroud)

boost :: property_tree上的文档很稀疏.如何使用boost :: property_tree创建JSON数组?

ybu*_*ill 20

如果您有一个子树,其唯一的节点有空键,那么它将被序列化为一个数组:

boost::property_tree::ptree array;
array.push_back(std::make_pair("", "bar"));
array.push_back(std::make_pair("", "baz"));

boost::property_tree::ptree props;
props.push_back(std::make_pair("array", array));

boost::property_tree::write_json("prob.json", props);
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用:错误C2664:'boost :: property_tree :: basic_ptree <Key,Data> :: push_back':无法将参数1从'std :: pair <_Ty1,_Ty2>'转换为'const std :: pair <_Ty1,_Ty2>&' (5认同)
  • @MichaelAnderson:我不认为首先使用`boost :: property_tree`来操作XML和JSON是一个好主意.它不是为它而建的.这两个任务都有更好的库,它们也像`boost :: property_tree`一样"小". (4认同)
  • 请注意,这是一个可悲的推论,就是无法创建一个空的JSON数组. (2认同)
  • @Marwin它在boost 1.51中对我不起作用.但是,array.put("","bar"); 似乎工作得很好. (2认同)