2012-11-19 41 views
4

我正在为Boost属性树编写JSON包装器。 当前焦点是将生成的JSON写入字符串或文件。Boost属性write_json不正确的行为

使用boost :: property_tree :: json_parser :: write_json(ss,* pt)将得到的属性树写入字符串中。

但是,这种方法不明白什么是真,假,空或数字。 所有内容都转换为字符串。

阅读Boost文档,这是库的限制。 有什么方法可以修改这种行为吗?

+0

[Duplicate](http://stackoverflow.com/questions/2855741/why-boost-property-tree-write-json-saves-everything-as-string-is-it-possible-to),如上所述在第一个答案....虽然第一个答案会很高兴在重复的位置。 – moodboom

回答

11

Link在此链接是解决问题的方法。

它涉及到更改提升代码,因为我尝试了另一种选择。 我的解决方案涉及的正则表达式:

std::string JSONObject::toString() const 
{ 
    boost::regex exp("\"(null|true|false|[0-9]+(\\.[0-9]+)?)\""); 
    std::stringstream ss; 
    boost::property_tree::json_parser::write_json(ss, *pt); 
    std::string rv = boost::regex_replace(ss.str(), exp, "$1"); 

    return rv; 
} 

基本上我搜索的关键字:真,假,空,任何类型的号码。 这些匹配被替换为相同的引号。

+0

和你移动的限制,以便如果我想有一个字符串只有数字或true/false/null作为字符串 - 我不能拥有它:-)但是,一切都比改变我想的提升代码更好。 –

+1

谢谢,那个正则表达式为我节省了一些头痛。虽然它现在以负数失败。我已经将它改为使用负数:'“\”(null | true | false | - ?[0-9] +(\\。[0-9] +)?)\“”' – user2460318