【问题标题】:C++: How to create an array using boost::property_tree?C++:如何使用 boost::property_tree 创建一个数组?
【发布时间】:2011-04-14 15:52:09
【问题描述】:

我没有看到使用 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;
  }
}

...只是给我...

{
  "foo": "bar",
  "foo": "baz"
}

关于 boost::property_tree 的文档很少。如何使用 boost::property_tree 创建 JSON 数组?

【问题讨论】:

    标签: c++ json boost boost-propertytree


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 请注意,一个可悲的推论是没有办法创建一个空的 JSON 数组。
    • @MichaelAnderson:我不认为首先使用boost::property_tree 来操作XML 和JSON 是一个好主意。这不是它的目的。这两个任务都有更好的库,它们也像 boost::property_tree 一样“小”。
    • 这不起作用:错误 C2664:'boost::property_tree::basic_ptree::push_back':无法从 'std::pair<_ty1> 转换参数 1 ' 到 'const std::pair<_ty1> &'
    • @Marwin 在 boost 1.51 中对我不起作用。然而,array.put("", "bar");似乎工作得很好。
    • 这不适用于长度为 1 的数组(至少对于 boost 1.42)。它将被序列化为字符串。
    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2019-02-10
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多