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

时间:2015-06-05 09:40:25

标签: c++ arrays json boost

我正在尝试在json中创建一个数组节点,输出如下:

{
    node: ["12", "13"]
}

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

{
    node: ""
}

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

{
    node: []
}

我该怎么做? 而且我不需要围绕数字的双引号(“”)。 有人可以帮忙吗?

我的代码如下:

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

感谢您的关注。

2 个答案:

答案 0 :(得分:4)

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

  

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

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

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

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

答案 1 :(得分:1)

这个答案假定,在稍后阶段,您将创建属性树的字符串。我发现了这种情况的一些解决方法。 而不是创建

{
   "node": ""
}

你可以轻松创建

{
   "node": [""]
}

ptree parent_tree, children, child;

children.push_back(std::make_pair("", child));
pt.add_child("node", children);

稍后,如果您有json的字符串表示形式,则可以用[""]替换字符[]。为此你只需要做:

#include <boost/algorithm/string.hpp>

boost::replace_all(json_string, "[\"\"]", "[]");

这样,您最终会得到一个包含

的字符串
{
   "node": []
}

希望这有帮助。