4

我正在为 Boost 属性树编写一个 JSON 包装器。目前的重点是将生成的 JSON 写入字符串或文件。

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

但是这个方法不明白什么是真、假、空或数字。一切都转换为字符串。

阅读 Boost 文档,这是该库的一个限制。有没有办法修改这种行为?

4

1 回答 1

12

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

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

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

基本上我会搜索关键字:true、false、null 和任何类型的数字。匹配项被替换为不带引号的相同内容。

于 2012-11-20T14:39:56.503 回答