Tôi đang tạo ứng dụng nhận thông tin phim từ themoviedb.com. Thông tin được cung cấp trong tệp JSON. Tôi đang cố lưu trữ thông tin bằng cách sử dụng cây thuộc tính tăng cường. Nhưng có một vấn đề nhỏ.Phân tích cú pháp JSON bằng cây thuộc tính tăng cường
tôi minh họa cho vấn đề bằng đoạn mã sau:
#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();
}
}
Nhưng khi tôi chạy này tôi nhận được kết quả như sau:
Tilte: Foo
Items:
ID: 456
Name: test2
ID: 456
Name: test2
Có ai biết những gì tôi đang làm sai? Tôi đoán nó nằm trong mã BOOST_FOREACH.
PS: Sử dụng Xcode 4.5.2 với LLVM GCC 4.2 Trình biên dịch.
Cảm ơn bạn đã phản hồi nhanh, Tôi khá mới với mã hóa C++, vì vậy bạn có thể giúp tôi giải quyết vấn đề này không? –
Tôi có bản sửa lỗi. Tôi đã thay đổi: 'typedef vector multiple_t;' to 'typedef vector multiple_t;', và thay đổi phần còn lại của mã cho phù hợp. Có bất kỳ bất lợi cho phương pháp này? –
@GlennVonk Không, trong trường hợp của bạn không có bất lợi. – ForEveR