55
我是新手c++
。使用boost
對std::Map
類型的數據進行序列化和反序列化最簡單的方法是什麼?我發現了一些使用PropertyTree
的例子,但它們對我來說很模糊。序列化和反序列化json與提高
我是新手c++
。使用boost
對std::Map
類型的數據進行序列化和反序列化最簡單的方法是什麼?我發現了一些使用PropertyTree
的例子,但它們對我來說很模糊。序列化和反序列化json與提高
請注意,property_tree
將鍵解釋爲路徑,例如,把對「a.b」=「z」將創建一個{「a」:{「b」:「z」}} JSON,而不是{「a.b」:「z」}。否則,使用property_tree
是微不足道的。這是一個小例子。
#include <sstream>
#include <map>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
using boost::property_tree::read_json;
using boost::property_tree::write_json;
void example() {
// Write json.
ptree pt;
pt.put ("foo", "bar");
std::ostringstream buf;
write_json (buf, pt, false);
std::string json = buf.str(); // {"foo":"bar"}
// Read json.
ptree pt2;
std::istringstream is (json);
read_json (is, pt2);
std::string foo = pt2.get<std::string> ("foo");
}
std::string map2json (const std::map<std::string, std::string>& map) {
ptree pt;
for (auto& entry: map)
pt.put (entry.first, entry.second);
std::ostringstream buf;
write_json (buf, pt, false);
return buf.str();
}
我試過了(首次或多或少地使用Boost 1.57.0),並且VS 2013給了我C4512警告(無法生成賦值操作符)。除了壓制警告之外,人們如何解決這個問題? – Dabbler
@Dabbler:我沒有得到GCC 4.9.1的警告('g ++ -c -Wall -O2 -std = C++ 11 pt.cpp')。沒有VS.同樣從谷歌搜索,我會說警告來自更深的地方,因爲沒有在給定的代碼中定義的類。因此,爲了回答您的問題,我認爲您應該隔離警告,檢查它是否由property_tree中的Boost代碼生成,如果是,請查找相應的Boost問題,如果沒有人提交,請提交新問題。比照http://www.boost.org/development/bugs.html – ArtemGr
很好的答案。數組如何? – ar2015