2015-06-05 105 views
3

我试图创建一个JSON数组节点,其输出是这样的升压property_tree我创建空数组节点这样的:如何使用JSON解析器

{ 
    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

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库。

+0

谢谢,我会找一些其他图书馆 – mkdym

0

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

{ 
    "node": "" 
} 

,你可以很容易地通过做

ptree parent_tree, children, child; 

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

后来创建

{ 
    "node": [""] 
} 

,当你有你的JSON字符串表示,可以通过替换字符[""][]。为此,您只需要做:

#include <boost/algorithm/string.hpp> 

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

这样,你将最终获得含

{ 
    "node": [] 
} 

希望这有助于一个字符串。