2014-02-17 3 views
2

문자열 트리에서 read_json으로 속성 트리를 만들고 write_json으로 스트림에 다시 쓰면 read_json으로 다시로드하려고 시도합니다. " 의 인스턴스 던지는 '부스트 :: exception_detail :: clone_impl>' 무엇을() : (1) : 객체 또는 배열을 "예상부스트 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); 

하지만 경우 I 이 방법으로 내 코드를 변경하면 작동합니다.

#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

내가 누군가와 같은 실수를하는 경우를 대비하여 답을 적어 두었습니다.

read_json은 문자열 스트림 액세스가 아닌 파일 용으로 설계되었으므로 write_json에서 작성한 stringstream을 피드 할 때 스트림은 단순히 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); 
+0

물론 이것은 "Boost PT의 디자인 속성"이 아닙니다. 스트림의 의미와 특히 문자열 스트림의 의미입니다. – sehe