मैं एक एप्लिकेशन बना रहा हूं जो 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 कोड में है।
पीएस: एलएलवीएम जीसीसी 4.2 कंपाइलर के साथ एक्सकोड 4.5.2 का उपयोग करना।
त्वरित प्रतिक्रिया के लिए धन्यवाद, मैं सी ++ कोडिंग के लिए काफी नया हूं, तो क्या आप इसे हल करने में मेरी सहायता कर सकते हैं? –
मेरे पास एक फिक्स है। मैंने बदल दिया: 'टाइपपीफ वेक्टर एकाधिक_t;' to 'typedef vector एकाधिक_t;', और तदनुसार शेष कोड बदल दिया। क्या इस विधि के लिए कोई नुकसान है? –
@GlennVonk नहीं, आपके मामले में कोई नुकसान नहीं है। – ForEveR