9
themoviedb.com에서 영화 정보를 가져 오는 응용 프로그램을 빌드하고 있습니다. 정보는 JSON 파일로 제공됩니다. 속성 트리를 사용하여 정보를 저장하려고합니다. 하지만 약간의 문제가 있습니다. 부스트 속성 트리를 사용하여 JSON 구문 분석
는 다음 코드에 의해 문제 설명 :#include <vector>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>
using namespace std;
using boost::property_tree::ptree;
class single_t{
int sID;
string sName;
public:
void setID(int ID){sID=ID;}
int getID(){return sID;}
void setName(string Name){sName=Name;}
string getName(){return sName;}
};
typedef vector<single_t*> multiple_t;
class foo{
string fTitle;
multiple_t fItems;
public:
string getTitle(){return fTitle;}
void setTitle(string Title){fTitle=Title;}
multiple_t getItems(){return fItems;}
void setItems(multiple_t Items){fItems = Items;}
void setItems(single_t Item){fItems.push_back(&Item);}
};
int main() {
try{
string response = "{\"title\":\"Foo\",\"items\":[{\"id\":123,\"name\":\"test1\"},{\"id\":456,\"name\":\"test2\"}]}";
ptree pt;
stringstream ss; ss << response;
read_json(ss, pt);
foo results;
results.setTitle(pt.get<string>("title"));
BOOST_FOREACH(ptree::value_type &v,pt.get_child("items")){
single_t result;
result.setID(v.second.get<int>("id"));
result.setName(v.second.get<string>("name"));
results.setItems(result);
}
cout << "Tilte: " << results.getTitle() << endl;
cout << "Items:" << endl;
for (int i=0; i!=results.getItems().size(); i++) {
cout << "\tID: " << results.getItems()[i]->getID()<< endl;
cout << "\tName: " << results.getItems()[i]->getName()<< endl;
}
}
catch (exception& e)
{
cout << "Exception: " << e.what();
}
}
을하지만이 프로그램을 실행할 때 나는 다음과 같은 출력을 얻을 :
Tilte: Foo
Items:
ID: 456
Name: test2
ID: 456
Name: test2
사람이 내가 잘못 알고 있나요? BOOST_FOREACH 코드에있는 것 같습니다.
추 신 : LLVM GCC 4.2에서 Xcode 4.5.2 사용 4.2 컴파일러.
빠른 응답을 보내 주셔서 감사합니다. 저는 C++ 코딩을 처음 접했으므로이 문제를 해결할 수 있습니까? –
수정되었습니다. 내가 변경 : 'typedef 벡터 multiple_t;''typedef 벡터 multiple_t;'로 변경하고 나머지 코드를 적절하게 변경했다. 이 방법에 단점이 있습니까? –
@GlennVonk 아니, 귀하의 경우에는 단점이 없습니다. – ForEveR