/*! * Email: guxuanqing@gmail.com * Auth: xor * Date: 2019-5-17 * File: vectorPtr.cpp * Class: %{Cpp:License:ClassName} (if applicable) * Brief: * Note: */ #include <bits/stdc++.h> #include <unistd.h> #include "rapidjson/document.h" #include "rapidjson/writer.h" //#include "rapidjson/filestream.h" #include "rapidjson/prettywriter.h" #include "rapidjson/stringbuffer.h" using namespace std; using namespace rapidjson; struct GENERALDATA{ int m_data; char m_buf[16]; }; struct DATATEST{ vector<GENERALDATA> vecData; }; void vecToJsonFunc(void *req, void *rsp) { DATATEST *dtest = static_cast<DATATEST *>(req); // rsp DATATEST *pRsp = static_cast<DATATEST *>(rsp); Document doc; doc.SetObject(); Document::AllocatorType &allocator=doc.GetAllocator(); //獲取分配器 doc.AddMember("Auth", "xor",allocator); Value array1(kArrayType); for (int i=0;i<dtest->vecData.size();++i) { GENERALDATA &gend = dtest->vecData[i]; Value object2(kObjectType); Value bufStr(kStringType); char tmpStr[16] = {0}; strncpy(tmpStr, to_string(i+100).c_str(), sizeof (tmpStr)); bufStr.SetString(tmpStr, 16); object2.AddMember("buf", bufStr, allocator); Value InOne(kNumberType); InOne.SetInt(gend.m_data); object2.AddMember("mdata", InOne, allocator); array1.PushBack(object2, allocator); } doc.AddMember("Numbers", array1, allocator); StringBuffer buffer; PrettyWriter<StringBuffer> pretty_writer(buffer); //PrettyWriter是格式化的json,若是是Writer則是換行空格壓縮後的json doc.Accept(pretty_writer); cout<<buffer.GetString()<<endl; // parse string readJsonStr = buffer.GetString(); Document docParser; docParser.Parse(readJsonStr.c_str()); // Value &author = docParser["Auth"]; if(docParser.HasMember("Numbers") && docParser["Numbers"].IsArray()) { const Value &ArrayObject = docParser["Numbers"]; for (size_t i = 0; i < ArrayObject.Size(); ++i) { const Value &v = ArrayObject[i]; GENERALDATA geneData; if (v.IsObject()) { if (v.HasMember("mdata") && v["mdata"].IsInt()) { geneData.m_data = v["mdata"].GetInt(); } if(v.HasMember("buf") && v["buf"].IsString()) { strncpy(geneData.m_buf, v["buf"].GetString(), sizeof (geneData.m_buf)); } } pRsp->vecData.emplace_back(geneData); } } //abort if(docParser.HasMember("room") && docParser["room"].IsString()) { cout << docParser["room"].GetString() << endl; } Value &author = docParser["Auth"]; sleep(10); system("pause"); } int main(int argc,char **argv){ DATATEST tst; for(int i=0;i<5;++i) { GENERALDATA dt; dt.m_data = i; tst.vecData.emplace_back(dt); } DATATEST tstRsp; vecToJsonFunc(&tst, &tstRsp); printf("hello world!\n"); return 0; }