我正在尝试使用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…… 像这样:
my_string_to_send_somewhere_else
{ "path1" : { "path2" : [ { "key0" : "0", "key1" : "true" }, { "key2" : "2.2", "key3" : "3.3" } ] } }
无论如何,有没有将它们另存为值,例如: "key1" : true或"key2" : 2.2?
"key1" : true
"key2" : 2.2
我最终在我的工具中添加了另一个功能来解决此问题:
#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(); } } }
希望有帮助。