如果我使用read_json从stringstream创建属性树,并使用write_json将其写回流中,则尝试使用read_json再次加载它会失败 “在抛出'boost :: exception_detail :: clone_impl>'的实例后终止调用 what():( 1):期望的对象或数组“
此代码因前述异常而失败:
#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);
答案 0 :(得分:0)
我写下答案,万一有人犯了同样的错误。
read_json是为文件设计的,而不是字符串流访问,所以当我给它写一个由write_json写的字符串流时,该流就是eof。 此代码现在有效:
#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);
pippo.seekg(0,pippo.beg);
read_json(pippo,pt);