如何使用 json 解析器的 boost property_tree 创建空数组节点

mkd*_*dym 5 c++ arrays json boost

我正在尝试在 json 中创建一个数组节点,其输出是这样的:

{
    node: ["12", "13"]
}
Run Code Online (Sandbox Code Playgroud)

但是当数组为空时,它会输出:

{
    node: ""
}
Run Code Online (Sandbox Code Playgroud)

这不是我想要的,我需要这个:

{
    node: []
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点 ?而且我不需要数字周围的双引号(“”)。任何人都可以帮忙吗?

我的代码如下:

boost::property_tree::ptree pt;
boost::property_tree::ptree array;
for (vector<int>::const_iterator iter = v.begin();
    iter != v.end();
    ++iter)
{
    boost::property_tree::ptree node;
    node.put("code", *iter);
    array.push_back(std::make_pair("", node));
}
pt.add_child("array", array);
Run Code Online (Sandbox Code Playgroud)

感谢您的关注。

seh*_*ehe 5

PSA Boost 1.75.0 引入了 Boost JSON;它可以做到这一点:现场演示

std::cout << json::object{{"node", json::array{}}};
Run Code Online (Sandbox Code Playgroud)

Boost 没有 JSON 库。它有一个属性树(认为:分层配置格式)库。

文档:http : //www.boost.org/doc/libs/1_58_0/doc/html/property_tree/parsers.html#property_tree.parsers.json_parser

它特别指出有些事情没有得到很好的支持:

  • JSON 中的数组是一个黑客(你不能代表空数组)
  • 所有类型信息都丢失了(一切都需要是 JSON 字符串)

这适合 Boost PropertyTree 的预期应用领域。如果它不适合您的问题,请使用 JSON 库。