#include #include #include #include "json.h" using namespace std; class Data { public: int inum; double dnum; string s; vector intvec1D; vector< vector > intvec2D; }; void initValues(Data* D); void writeValues(Data* D); void readValues(Data* D); void printValues(Data* D); int main() { Data* Dout = new Data(); initValues(Dout); writeValues(Dout); cout << endl << "I wrote:" << endl; printValues(Dout); Data* Din = new Data(); readValues(Din); cout << endl << "I read:" << endl; printValues(Din); cout << "[Enter] to exit ..."; cin.get(); return 0; } void initValues(Data* D) { D->inum = 9; D->dnum = 1.23; D->s = "a string"; D->intvec1D = {1,2,3,4}; D->intvec2D.push_back({11,12,13}); D->intvec2D.push_back({21,22,23}); D->intvec2D.push_back({31,32,33}); } void writeValues(Data* D) { json::Object obj; obj["inum"] = D->inum; obj["dnum"] = D->dnum; obj["s"] = D->s; json::Array vec1D; for(int i=0;iintvec1D.size();i++) vec1D.push_back(D->intvec1D[i]); obj["intvec1D"] = vec1D; json::Array vec2D; // here I'd expect something like "intvec2D":[[11,12,13],[21,22,23],[21,22,23]] for(int i=0;iintvec2D.size();i++) { json::Array vec; for(int j=0;jintvec2D.size();j++) vec.push_back(D->intvec2D[i][j]); vec2D.push_back(vec); } obj["intvec2D"] = vec2D; string str = json::Serialize(obj); ofstream outfile; outfile.open ("data.json"); outfile << str << endl; outfile.close(); cout << "json string: " << str << endl; } void readValues(Data* D) { string line; ifstream infile; infile.open("data.json"); getline(infile,line); infile.close(); json::Value JSV = json::Deserialize(line); D->inum = JSV["inum"]; D->dnum = JSV["dnum"]; D->s = JSV["s"]; json::Array vec1 = (json::Array) JSV["intvec1D"]; for(int i=0;iintvec1D.push_back(vec1[i]); json::Array vec2 = (json::Array) JSV["intvec2D"]; // here I read "intvec2D":[[11,12,13],[21,22,23],[21,22,23]] for(int i = 0;i row; for(int j=0;jintvec2D.push_back(row); } } void printValues(Data* D) { cout << "Integer value: " << D->inum << endl; cout << "Double value: " << D->dnum << endl; cout << "String: " << D->s << endl; cout << "Vector 1D: " << endl; for(int i=0;iintvec1D.size();i++) cout << D->intvec1D[i] << " ";cout << endl; cout << "Vector 2D: " << endl; for(int i=0;iintvec2D.size();i++) { for(int j=0;jintvec2D[i].size();j++) cout << D->intvec2D[i][j] << " "; cout << endl; } }