如何解决为什么Boost属性树write_json会将所有内容保存为字符串?有可能改变吗?
#include <string>
#include <regex>
#include <boost/property_tree/json_parser.hpp>
namespace bpt = boost::property_tree;
typedef bpt::ptree JSON;
namespace boost { namespace property_tree {
inline void write_jsonEx(const std::string & path, const JSON & ptree)
{
std::ostringstream oss;
bpt::write_json(oss, ptree);
std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\"");
std::string result = std::regex_replace(oss.str(), reg, "$1");
std::ofstream file;
file.open(path);
file << result;
file.close();
}
} }
希望有帮助。
解决方法
我正在尝试使用boost属性树write_json进行序列化,它将所有内容保存为字符串,这并不是数据错误,但是我每次都需要显式地转换它们,并且想在其他地方使用它们。(例如在python或其他C
++ json(非boost)库中)
这是一些示例代码,我所得到的取决于语言环境:
boost::property_tree::ptree root,arr,elem1,elem2;
elem1.put<int>("key0",0);
elem1.put<bool>("key1",true);
elem2.put<float>("key2",2.2f);
elem2.put<double>("key3",3.3);
arr.push_back( std::make_pair("",elem1) );
arr.push_back( std::make_pair("",elem2) );
root.put_child("path1.path2",arr);
std::stringstream ss;
write_json(ss,root);
std::string my_string_to_send_somewhare_else = ss.str();
并且my_string_to_send_somewhere_else
…… 像这样:
{
"path1" :
{
"path2" :
[
{
"key0" : "0","key1" : "true"
},{
"key2" : "2.2","key3" : "3.3"
}
]
}
}
无论如何,有没有将它们另存为值,例如: "key1" : true
或"key2" : 2.2
?