2
如果我使用read_json從stringstream創建屬性樹,然後使用write_json將其寫回到流中,則嘗試使用read_json再次加載它,失敗,並返回 「terminate called after投擲的實例 '的boost :: exception_detail :: clone_impl>' 什麼():(1):預期對象或數組」Boost read_json和write_json對於屬性樹不是等價的
此代碼失敗,並forementioned例外:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
ptree pt;
stringstream pippo("{\"size\":1000,\"reserved\":100,\"list\": {\"122\":1,\"123\":3}}");
read_json(pippo,pt);
write_json(pippo,pt,false);
read_json(pippo,pt);
但是,如果我更改我的代碼這種方式,它的工作原理:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
ptree pt;
stringstream pippo("{\"size\":1000,\"reserved\":100,\"list\": {\"122\":1,\"123\":3}}");
read_json(pippo,pt);
write_json(pippo,pt,false);
stringstream pluto(pippo.str());
read_json(pluto,pt);
當然,這不是「Boost PT的設計特性」。這是流的語義,特別是stringstreams – sehe