我正在为 Boost 属性树编写一个 JSON 包装器。目前的重点是将生成的 JSON 写入字符串或文件。
使用 boost::property_tree::json_parser::write_json(ss, *pt) 将生成的属性树写入字符串。
但是这个方法不明白什么是真、假、空或数字。一切都转换为字符串。
阅读 Boost 文档,这是该库的一个限制。有没有办法修改这种行为?
我正在为 Boost 属性树编写一个 JSON 包装器。目前的重点是将生成的 JSON 写入字符串或文件。
使用 boost::property_tree::json_parser::write_json(ss, *pt) 将生成的属性树写入字符串。
但是这个方法不明白什么是真、假、空或数字。一切都转换为字符串。
阅读 Boost 文档,这是该库的一个限制。有没有办法修改这种行为?
链接在此链接中是解决问题的方法。
它涉及更改 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 和任何类型的数字。匹配项被替换为不带引号的相同内容。