TZJson.h 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097
  1. #ifndef __TZ_JSON_H
  2. #define __TZ_JSON_H
  3. // rapidjson
  4. #include "rapidjson/document.h"
  5. #include "rapidjson/prettywriter.h"
  6. #include "rapidjson/stringbuffer.h"
  7. // std
  8. #include <string>
  9. #include <vector>
  10. #include <list>
  11. namespace tzc {
  12. namespace json {
  13. typedef rapidjson::Document JsonDoc;
  14. typedef rapidjson::Value JsonValue;
  15. template <typename T> std::string ValueToJson(T & doc)
  16. {
  17. rapidjson::StringBuffer sb;
  18. rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(
  19. sb);
  20. doc.Accept(writer);
  21. return sb.GetString();
  22. }
  23. /**
  24. * @brief base type to json
  25. */
  26. template <typename T>
  27. inline bool setFiled(JsonDoc & doc,
  28. const std::string & fildName, const T & value)
  29. {
  30. auto & allocator = doc.GetAllocator();
  31. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  32. JsonValue(value), allocator);
  33. return true;
  34. }
  35. inline bool setFiled(JsonDoc & doc,
  36. const std::string & fildName, const std::string & value)
  37. {
  38. auto & allocator = doc.GetAllocator();
  39. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  40. JsonValue(value.c_str(), allocator), allocator);
  41. return true;
  42. }
  43. /**
  44. * @brief base type from json
  45. */
  46. template <typename T>
  47. inline T getFiled(const JsonDoc & doc,
  48. const std::string & fildName, const T & defaultValue)
  49. {
  50. const char * pfildName = fildName.c_str();
  51. JsonValue::ConstMemberIterator itr = doc.FindMember(pfildName);
  52. if (itr != doc.MemberEnd())
  53. {
  54. if (itr->value.Is<T>())
  55. {
  56. return itr->value.Get<T>();
  57. }
  58. }
  59. return defaultValue;
  60. }
  61. inline float getFiled(const JsonDoc & doc,
  62. const std::string & fildName, const float & defaultValue)
  63. {
  64. const char * pfildName = fildName.c_str();
  65. JsonValue::ConstMemberIterator itr = doc.FindMember(pfildName);
  66. if (itr != doc.MemberEnd())
  67. {
  68. if (itr->value.IsFloat())
  69. {
  70. return itr->value.Get<float>();
  71. }
  72. else if (itr->value.IsInt())
  73. {
  74. auto iValue = itr->value.Get<int>();
  75. return (float)iValue;
  76. }
  77. }
  78. return defaultValue;
  79. }
  80. inline double getFiled(const JsonDoc & doc,
  81. const std::string & fildName, const double & defaultValue)
  82. {
  83. const char * pfildName = fildName.c_str();
  84. JsonValue::ConstMemberIterator itr = doc.FindMember(pfildName);
  85. if (itr != doc.MemberEnd())
  86. {
  87. if (itr->value.IsDouble())
  88. {
  89. return itr->value.Get<double>();
  90. }
  91. else if (itr->value.IsInt())
  92. {
  93. auto iValue = itr->value.Get<int>();
  94. return (double)iValue;
  95. }
  96. }
  97. return defaultValue;
  98. }
  99. inline std::string getFiled(const JsonDoc & doc,
  100. const std::string & fildName, const std::string & defaultValue)
  101. {
  102. const char * pfildName = fildName.c_str();
  103. JsonValue::ConstMemberIterator itr = doc.FindMember(pfildName);
  104. if (itr != doc.MemberEnd() && itr->value.IsString())
  105. {
  106. return itr->value.GetString();
  107. }
  108. else
  109. {
  110. return defaultValue;
  111. }
  112. }
  113. inline std::string getFiled(const JsonDoc & doc,
  114. const std::string & fildName, const char * defaultValue)
  115. {
  116. const char * pfildName = fildName.c_str();
  117. JsonValue::ConstMemberIterator itr = doc.FindMember(pfildName);
  118. if (itr != doc.MemberEnd() && itr->value.IsString())
  119. {
  120. return itr->value.GetString();
  121. }
  122. else
  123. {
  124. return defaultValue;
  125. }
  126. }
  127. /**
  128. * @brief object type to json
  129. */
  130. template <typename T>
  131. inline bool setFiledObject(JsonDoc & doc,
  132. const std::string & fildName, const T & value)
  133. {
  134. auto & allocator = doc.GetAllocator();
  135. JsonDoc inner(&allocator);
  136. inner.Parse(value.toJson().c_str());
  137. if (inner.HasParseError())
  138. {
  139. return false;
  140. }
  141. doc.AddMember(
  142. JsonValue(fildName.c_str(), allocator), inner, allocator);
  143. return true;
  144. }
  145. /**
  146. * @brief object type from json
  147. */
  148. template <typename T>
  149. inline bool ConverObject(JsonDoc & document,
  150. const char * name, T & value)
  151. {
  152. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  153. if (itr != document.MemberEnd())
  154. {
  155. if (!itr->value.IsObject())
  156. {
  157. return false;
  158. }
  159. return T::fromJson(ValueToJson(itr->value), value);
  160. }
  161. return false;
  162. }
  163. /**
  164. * @brief base type array to json
  165. */
  166. template <typename T>
  167. inline bool setFiledArray(JsonDoc & doc,
  168. const std::string & fildName, const T & collection)
  169. {
  170. auto & allocator = doc.GetAllocator();
  171. JsonDoc inner(&allocator);
  172. inner.SetArray();
  173. for (typename T::const_iterator it = collection.begin();
  174. it != collection.end(); ++it)
  175. {
  176. JsonValue ele(*it);
  177. inner.PushBack(ele, allocator);
  178. }
  179. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  180. inner, allocator);
  181. return true;
  182. }
  183. inline bool setFiledArray(JsonDoc & doc,
  184. const std::string & fildName,
  185. const std::vector<std::string> & collection)
  186. {
  187. auto & allocator = doc.GetAllocator();
  188. JsonDoc inner(&allocator);
  189. inner.SetArray();
  190. for (std::vector<std::string>::const_iterator it = collection.begin();
  191. it != collection.end(); ++it)
  192. {
  193. JsonValue ele;
  194. ele.SetString(it->c_str(), (rapidjson::SizeType)it->size(), allocator);
  195. inner.PushBack(ele, allocator);
  196. }
  197. doc.AddMember(JsonValue(fildName.c_str(), allocator), inner, allocator);
  198. return true;
  199. }
  200. inline bool setFiledArray(JsonDoc & doc,
  201. const std::string & fildName,
  202. const std::list<std::string> & collection)
  203. {
  204. std::vector<std::string> tmpcollection
  205. { collection.begin(), collection.end() };
  206. return setFiledArray(doc, fildName, tmpcollection);
  207. }
  208. /**
  209. * @brief base type array from json
  210. */
  211. template <typename T>
  212. inline bool ConverArray(JsonDoc & document,
  213. const char * name, T & value)
  214. {
  215. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  216. if (itr != document.MemberEnd())
  217. {
  218. if (!itr->value.IsArray())
  219. {
  220. return false;
  221. }
  222. for (auto & v : itr->value.GetArray())
  223. {
  224. value.push_back(v.Get<typename T::value_type>());
  225. }
  226. return true;
  227. }
  228. return false;
  229. }
  230. inline bool ConverArray(JsonDoc & document,
  231. const char * name, std::vector<std::string> & value)
  232. {
  233. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  234. if (itr != document.MemberEnd())
  235. {
  236. if (!itr->value.IsArray())
  237. {
  238. return false;
  239. }
  240. for (auto & v : itr->value.GetArray())
  241. {
  242. if (v.IsString())
  243. {
  244. value.push_back(v.GetString());
  245. }
  246. }
  247. return true;
  248. }
  249. return false;
  250. }
  251. inline bool ConverArray(JsonDoc & document,
  252. const char * name, std::list<std::string> & value)
  253. {
  254. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  255. if (itr != document.MemberEnd())
  256. {
  257. if (!itr->value.IsArray())
  258. {
  259. return false;
  260. }
  261. for (auto & v : itr->value.GetArray())
  262. {
  263. if (v.IsString())
  264. {
  265. value.push_back(v.GetString());
  266. }
  267. }
  268. return true;
  269. }
  270. return false;
  271. }
  272. /**
  273. * @brief object type array to json
  274. */
  275. template <typename T>
  276. inline bool setFiledArrayObject(JsonDoc & doc,
  277. const std::string & fildName, const T & collection)
  278. {
  279. auto & allocator = doc.GetAllocator();
  280. JsonDoc inner(&allocator);
  281. inner.SetArray();
  282. for (typename T::const_iterator it = collection.begin();
  283. it != collection.end(); ++it)
  284. {
  285. std::string json = it->toJson();
  286. JsonDoc ele(&allocator);
  287. ele.Parse(json.c_str());
  288. if (ele.HasParseError())
  289. {
  290. continue;
  291. }
  292. inner.PushBack(ele, allocator);
  293. }
  294. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  295. inner, allocator);
  296. return true;
  297. }
  298. /**
  299. * @brief object type array from json
  300. */
  301. template <typename T>
  302. inline bool ConverArrayObject(
  303. JsonDoc & document, const char * name, T & value)
  304. {
  305. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  306. if (itr != document.MemberEnd())
  307. {
  308. if (!itr->value.IsArray())
  309. {
  310. return false;
  311. }
  312. for (auto & v : itr->value.GetArray())
  313. {
  314. typename T::value_type ele;
  315. T::value_type::fromJson(ValueToJson(v), ele);
  316. value.push_back(ele);
  317. }
  318. return true;
  319. }
  320. return false;
  321. }
  322. /**
  323. * @brief base type bare array to json
  324. */
  325. template <typename T>
  326. inline std::string BaseArrayToJson(const T & collection)
  327. {
  328. JsonDoc doc;
  329. auto & allocator = doc.GetAllocator();
  330. doc.SetArray();
  331. for (typename T::const_iterator it = collection.begin();
  332. it != collection.end(); ++it)
  333. {
  334. JsonValue value(*it);
  335. doc.PushBack(value, allocator);
  336. }
  337. return ValueToJson(doc);
  338. }
  339. inline std::string BaseArrayToJson(
  340. const std::vector<std::string> & collection)
  341. {
  342. JsonDoc doc;
  343. auto & allocator = doc.GetAllocator();
  344. doc.SetArray();
  345. for (auto it = collection.begin(); it != collection.end(); ++it)
  346. {
  347. JsonValue ele;
  348. ele.SetString(it->c_str(), (rapidjson::SizeType)it->size(), allocator);
  349. doc.PushBack(ele, allocator);
  350. }
  351. return ValueToJson(doc);
  352. }
  353. inline std::string BaseArrayToJson(
  354. const std::list<std::string> & collection)
  355. {
  356. std::vector<std::string> tmpcollection
  357. { collection.begin(), collection.end() };
  358. return BaseArrayToJson(tmpcollection);
  359. }
  360. /**
  361. * @brief base type bare array from json
  362. */
  363. template <typename T>
  364. inline bool JsonToBaseArray(
  365. JsonDoc & document, std::vector<T> & collections)
  366. {
  367. if (!document.IsArray())
  368. {
  369. return false;
  370. }
  371. for (auto & val : document.GetArray())
  372. {
  373. if (!val.Is<T>())
  374. {
  375. continue;
  376. }
  377. collections.push_back(val.Get<T>());
  378. }
  379. return true;
  380. }
  381. template <typename T>
  382. inline bool JsonToBaseArray(JsonDoc & document,
  383. std::list<T> & collections)
  384. {
  385. if (!document.IsArray())
  386. {
  387. return false;
  388. }
  389. for (auto & val : document.GetArray())
  390. {
  391. if (!val.Is<T>())
  392. {
  393. continue;
  394. }
  395. collections.emplace_back(val.Get<T>());
  396. }
  397. return true;
  398. }
  399. inline bool JsonToBaseArray(
  400. JsonDoc & document, std::vector<std::string> & collections)
  401. {
  402. if (!document.IsArray())
  403. {
  404. return false;
  405. }
  406. for (auto & val : document.GetArray())
  407. {
  408. if (!val.IsString())
  409. {
  410. continue;
  411. }
  412. collections.emplace_back(val.GetString());
  413. }
  414. return true;
  415. }
  416. inline bool JsonToBaseArray(
  417. JsonDoc & document, std::list<std::string> & collections)
  418. {
  419. if (!document.IsArray())
  420. {
  421. return false;
  422. }
  423. for (auto & val : document.GetArray())
  424. {
  425. if (!val.IsString())
  426. {
  427. continue;
  428. }
  429. collections.emplace_back(val.GetString());
  430. }
  431. return true;
  432. }
  433. /**
  434. * @brief object type bare array to json
  435. */
  436. template <typename T>
  437. inline std::string ArrayToJson(const T & collection)
  438. {
  439. JsonDoc doc;
  440. auto & allocator = doc.GetAllocator();
  441. doc.SetArray();
  442. for (typename T::const_iterator it = collection.begin();
  443. it != collection.end(); ++it)
  444. {
  445. std::string json = it->toJson();
  446. JsonDoc ele(&allocator);
  447. ele.Parse(json.c_str());
  448. if (ele.HasParseError())
  449. {
  450. continue;
  451. }
  452. doc.PushBack(ele, allocator);
  453. }
  454. return ValueToJson(doc);
  455. }
  456. /**
  457. * @brief object type bare array to json
  458. */
  459. template <typename T>
  460. inline bool JsonToArray(JsonDoc & document, std::vector<T> & collections)
  461. {
  462. if (!document.IsArray())
  463. {
  464. return false;
  465. }
  466. for (auto & val : document.GetArray())
  467. {
  468. if (!val.IsObject())
  469. {
  470. continue;
  471. }
  472. T value;
  473. if (!T::fromJson(ValueToJson(val), value))
  474. {
  475. continue;
  476. }
  477. collections.push_back(value);
  478. }
  479. return true;
  480. }
  481. template <typename T>
  482. inline bool JsonToArray(JsonDoc & document, std::list<T> & collections)
  483. {
  484. if (!document.IsArray())
  485. {
  486. return false;
  487. }
  488. for (auto & val : document.GetArray())
  489. {
  490. if (!val.IsObject())
  491. {
  492. continue;
  493. }
  494. T value;
  495. if (!T::fromJson(ValueToJson(val), value))
  496. {
  497. continue;
  498. }
  499. collections.push_back(value);
  500. }
  501. return true;
  502. }
  503. /**
  504. * 以下函数为TzJson新增函数 用于处理不定类型的成员json转换
  505. * 并且重载了vector和list的容器的两个版本
  506. */
  507. // integer toJson and fromJson
  508. inline bool setFiledParams(
  509. JsonDoc & doc, const std::string & fildName,
  510. const int & value)
  511. {
  512. return tzc::json::setFiled(doc, fildName, value);
  513. }
  514. inline bool setFiledParams(
  515. JsonDoc & doc, const std::string & fildName,
  516. const unsigned int & value)
  517. {
  518. return tzc::json::setFiled(doc, fildName, value);
  519. }
  520. /**
  521. * 针对长整型,强烈建议使用标准库定义的平台通用类型 int64_t 和 uint64_t
  522. *
  523. * !! 注意:
  524. * 类型int64_t和类型uint64_t 在Linux系统和Windows系统中定义不同
  525. * Linux Windows
  526. * int64_t long long long
  527. * uint64_t unsigned long unsigned long long
  528. *
  529. * rapidjson中采用了类型int64_t和类型uint64_t
  530. *
  531. * common库中 实质为 long的类型有 TZ_ULONG TZ_LONG TZ_SLONG,
  532. * 这些类型的变量 在Windows系统中 无法json转换
  533. *
  534. * common库中 实质为 long long的类型有
  535. * TZ_ULONGLONG TZ_LONGLONG TZ_SLONGLONG TZ_Uint64 TZ_Int64,
  536. * 这些类型的变量 在Linux系统中 无法json转换
  537. *
  538. * 在 TZJson 中, 完全兼容 longlong 类型。
  539. *
  540. * long类型在Linux和Windows中大小不一致,不考虑使用
  541. */
  542. inline bool setFiledParams(
  543. JsonDoc & doc, const std::string & fildName,
  544. const int64_t & value)
  545. {
  546. return tzc::json::setFiled(doc, fildName, value);
  547. }
  548. inline bool setFiledParams(
  549. JsonDoc & doc, const std::string & fildName,
  550. const uint64_t & value)
  551. {
  552. return tzc::json::setFiled(doc, fildName, value);
  553. }
  554. inline bool setFiledParams(
  555. JsonDoc & doc, const std::string & fildName,
  556. const float & value)
  557. {
  558. return tzc::json::setFiled(doc, fildName, value);
  559. }
  560. inline bool setFiledParams(
  561. JsonDoc & doc, const std::string & fildName,
  562. const double & value)
  563. {
  564. return tzc::json::setFiled(doc, fildName, value);
  565. }
  566. inline bool setFiledParams(
  567. JsonDoc & doc, const std::string & fildName,
  568. const bool & value)
  569. {
  570. return tzc::json::setFiled(doc, fildName, value);
  571. }
  572. // string toJson
  573. inline bool setFiledParams(
  574. JsonDoc & doc, const std::string & fildName,
  575. const std::string & value)
  576. {
  577. return tzc::json::setFiled(doc, fildName, value);
  578. }
  579. inline bool setFiledParams(
  580. JsonDoc & doc, const std::string & fildName,
  581. const char * value)
  582. {
  583. return tzc::json::setFiled(doc, fildName, std::string(value));
  584. }
  585. // class / struct toJson
  586. template <typename T>
  587. inline bool setFiledParams(JsonDoc & doc,
  588. const std::string & fildName, const T & value)
  589. {
  590. return tzc::json::setFiledObject(doc, fildName, value);
  591. }
  592. // container number (arrar number) toJson
  593. inline bool setFiledParams(
  594. JsonDoc & doc, const std::string & fildName,
  595. const std::vector<int> & value)
  596. {
  597. return tzc::json::setFiledArray(doc, fildName, value);
  598. }
  599. inline bool setFiledParams(
  600. JsonDoc & doc, const std::string & fildName,
  601. const std::list<int> & value)
  602. {
  603. std::vector<int> vecValue(value.begin(), value.end());
  604. return tzc::json::setFiledArray(doc, fildName, vecValue);
  605. }
  606. inline bool setFiledParams(
  607. JsonDoc & doc, const std::string & fildName,
  608. const std::vector<unsigned int> & value)
  609. {
  610. return tzc::json::setFiledArray(doc, fildName, value);
  611. }
  612. inline bool setFiledParams(
  613. JsonDoc & doc, const std::string & fildName,
  614. const std::list<unsigned int> & value)
  615. {
  616. std::vector<unsigned int> vecValue(value.begin(), value.end());
  617. return tzc::json::setFiledArray(doc, fildName, vecValue);
  618. }
  619. inline bool setFiledParams(
  620. JsonDoc & doc, const std::string & fildName,
  621. const std::vector<int64_t> & value)
  622. {
  623. return tzc::json::setFiledArray(doc, fildName, value);
  624. }
  625. inline bool setFiledParams(
  626. JsonDoc & doc, const std::string & fildName,
  627. const std::list<int64_t> & value)
  628. {
  629. std::vector<int64_t> vecValue(value.begin(), value.end());
  630. return tzc::json::setFiledArray(doc, fildName, vecValue);
  631. }
  632. inline bool setFiledParams(
  633. JsonDoc & doc, const std::string & fildName,
  634. const std::vector<uint64_t> & value)
  635. {
  636. return tzc::json::setFiledArray(doc, fildName, value);
  637. }
  638. inline bool setFiledParams(
  639. JsonDoc & doc, const std::string & fildName,
  640. const std::list<uint64_t> & value)
  641. {
  642. std::vector<uint64_t> vecValue(value.begin(), value.end());
  643. return tzc::json::setFiledArray(doc, fildName, vecValue);
  644. }
  645. inline bool setFiledParams(
  646. JsonDoc & doc, const std::string & fildName,
  647. const std::vector<float> & value)
  648. {
  649. return tzc::json::setFiledArray(doc, fildName, value);
  650. }
  651. inline bool setFiledParams(
  652. JsonDoc & doc, const std::string & fildName,
  653. const std::list<float> & value)
  654. {
  655. std::vector<float> vecValue(value.begin(), value.end());
  656. return tzc::json::setFiledArray(doc, fildName, vecValue);
  657. }
  658. inline bool setFiledParams(
  659. JsonDoc & doc, const std::string & fildName,
  660. const std::vector<double> & value)
  661. {
  662. return tzc::json::setFiledArray(doc, fildName, value);
  663. }
  664. inline bool setFiledParams(
  665. JsonDoc & doc, const std::string & fildName,
  666. const std::list<double> & value)
  667. {
  668. std::vector<double> vecValue(value.begin(), value.end());
  669. return tzc::json::setFiledArray(doc, fildName, vecValue);
  670. }
  671. inline bool setFiledParams(
  672. JsonDoc & doc, const std::string & fildName,
  673. const std::vector<bool> & value)
  674. {
  675. return tzc::json::setFiledArray(doc, fildName, value);
  676. }
  677. inline bool setFiledParams(
  678. JsonDoc & doc, const std::string & fildName,
  679. const std::list<bool> & value)
  680. {
  681. std::vector<double> vecValue(value.begin(), value.end());
  682. return tzc::json::setFiledArray(doc, fildName, vecValue);
  683. }
  684. inline bool setFiledParams(
  685. JsonDoc & doc, const std::string & fildName,
  686. const std::vector<std::string> & value)
  687. {
  688. return tzc::json::setFiledArray(doc, fildName, value);
  689. }
  690. inline bool setFiledParams(
  691. JsonDoc & doc, const std::string & fildName,
  692. const std::list<std::string> & value)
  693. {
  694. std::vector<std::string> vecValue(value.begin(), value.end());
  695. return tzc::json::setFiledArray(doc, fildName, vecValue);
  696. }
  697. // class / struct array toJson
  698. template <typename T>
  699. inline bool setFiledParams(JsonDoc & doc,
  700. const std::string & fildName, const std::list<T> & value)
  701. {
  702. return tzc::json::setFiledArrayObject(doc, fildName, value);
  703. }
  704. template <typename T>
  705. inline bool setFiledParams(JsonDoc & doc,
  706. const std::string & fildName, const std::vector<T> & value)
  707. {
  708. return tzc::json::setFiledArrayObject(doc, fildName, value);
  709. }
  710. // integer toJson and fromJson
  711. inline bool getFiledParams(
  712. JsonDoc & doc, const std::string & fildName, int & value)
  713. {
  714. value = tzc::json::getFiled(doc, fildName, (int)(0));
  715. return true;
  716. }
  717. inline bool getFiledParams(
  718. JsonDoc & doc, const std::string & fildName, unsigned int & value)
  719. {
  720. value = tzc::json::getFiled(doc, fildName, (unsigned int)(0));
  721. return true;
  722. }
  723. inline bool getFiledParams(
  724. JsonDoc & doc, const std::string & fildName, int64_t & value)
  725. {
  726. value = tzc::json::getFiled(doc, fildName, (int64_t)(0));
  727. return true;
  728. }
  729. inline bool getFiledParams(
  730. JsonDoc & doc, const std::string & fildName, uint64_t & value)
  731. {
  732. value = tzc::json::getFiled(doc, fildName, (uint64_t)(0));
  733. return true;
  734. }
  735. inline bool getFiledParams(
  736. JsonDoc & doc, const std::string & fildName, float & value)
  737. {
  738. value = tzc::json::getFiled(doc, fildName, (float)(0));
  739. return true;
  740. }
  741. inline bool getFiledParams(
  742. JsonDoc & doc, const std::string & fildName, double & value)
  743. {
  744. value = tzc::json::getFiled(doc, fildName, (double)(0));
  745. return true;
  746. }
  747. inline bool getFiledParams(
  748. JsonDoc & doc, const std::string & fildName, bool & value)
  749. {
  750. value = tzc::json::getFiled(doc, fildName, false);
  751. return true;
  752. }
  753. // string fromJson
  754. inline bool getFiledParams(
  755. JsonDoc & doc, const std::string & fildName, std::string & value)
  756. {
  757. value = tzc::json::getFiled(doc, fildName, "");
  758. return true;
  759. }
  760. // class / struct fromJson
  761. template <typename T>
  762. inline bool getFiledParams(JsonDoc & doc,
  763. const std::string & fildName, T & value)
  764. {
  765. return tzc::json::ConverObject(doc, fildName.c_str(), value);
  766. }
  767. // number array fromJson
  768. inline bool getFiledParams(
  769. JsonDoc & doc, const std::string & fildName,
  770. std::list<int> & value)
  771. {
  772. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  773. }
  774. inline bool getFiledParams(
  775. JsonDoc & doc, const std::string & fildName,
  776. std::vector<int> & value)
  777. {
  778. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  779. }
  780. inline bool getFiledParams(
  781. JsonDoc & doc, const std::string & fildName,
  782. std::list<unsigned int> & value)
  783. {
  784. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  785. }
  786. inline bool getFiledParams(
  787. JsonDoc & doc, const std::string & fildName,
  788. std::vector<unsigned int> & value)
  789. {
  790. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  791. }
  792. inline bool getFiledParams(
  793. JsonDoc & doc, const std::string & fildName,
  794. std::list<int64_t> & value)
  795. {
  796. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  797. }
  798. inline bool getFiledParams(
  799. JsonDoc & doc, const std::string & fildName,
  800. std::vector<int64_t> & value)
  801. {
  802. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  803. }
  804. inline bool getFiledParams(
  805. JsonDoc & doc, const std::string & fildName,
  806. std::list<uint64_t> & value)
  807. {
  808. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  809. }
  810. inline bool getFiledParams(
  811. JsonDoc & doc, const std::string & fildName,
  812. std::vector<uint64_t> & value)
  813. {
  814. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  815. }
  816. inline bool getFiledParams(
  817. JsonDoc & doc, const std::string & fildName,
  818. std::list<float> & value)
  819. {
  820. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  821. }
  822. inline bool getFiledParams(
  823. JsonDoc & doc, const std::string & fildName,
  824. std::vector<float> & value)
  825. {
  826. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  827. }
  828. inline bool getFiledParams(
  829. JsonDoc & doc, const std::string & fildName,
  830. std::list<double> & value)
  831. {
  832. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  833. }
  834. inline bool getFiledParams(
  835. JsonDoc & doc, const std::string & fildName,
  836. std::vector<double> & value)
  837. {
  838. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  839. }
  840. inline bool getFiledParams(
  841. JsonDoc & doc, const std::string & fildName,
  842. std::list<bool> & value)
  843. {
  844. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  845. }
  846. inline bool getFiledParams(
  847. JsonDoc & doc, const std::string & fildName,
  848. std::vector<bool> & value)
  849. {
  850. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  851. }
  852. // string array fromJson
  853. inline bool getFiledParams(
  854. JsonDoc & doc, const std::string & fildName,
  855. std::list<std::string> & value)
  856. {
  857. std::vector<std::string> vecValue;
  858. if (tzc::json::ConverArray(doc, fildName.c_str(), vecValue))
  859. {
  860. value.assign(vecValue.begin(), vecValue.end());
  861. return true;
  862. }
  863. return false;
  864. }
  865. inline bool getFiledParams(
  866. JsonDoc & doc, const std::string & fildName,
  867. std::vector<std::string> & value)
  868. {
  869. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  870. }
  871. // class / struct array fromJson
  872. template <typename T>
  873. inline bool getFiledParams(JsonDoc & doc,
  874. const std::string & fildName, std::list<T> & value)
  875. {
  876. return tzc::json::ConverArrayObject(doc, fildName.c_str(), value);
  877. }
  878. template <typename T>
  879. inline bool getFiledParams(JsonDoc & doc,
  880. const std::string & fildName, std::vector<T> & value)
  881. {
  882. return tzc::json::ConverArrayObject(doc, fildName.c_str(), value);
  883. }
  884. /**
  885. * @brief Encapsulation functions for bare array json convert
  886. */
  887. template<typename T>
  888. inline std::string toJson(const std::vector<T> & list)
  889. {
  890. return tzc::json::ArrayToJson(list);
  891. }
  892. template<typename T>
  893. inline std::string toJson(const std::list<T> & list)
  894. {
  895. return tzc::json::ArrayToJson(list);
  896. }
  897. template <typename T>
  898. inline bool fromJson(
  899. const std::string & json, std::vector<T> & values)
  900. {
  901. tzc::json::JsonDoc document;
  902. document.Parse(json.c_str());
  903. if (document.HasParseError())
  904. {
  905. return false;
  906. }
  907. return tzc::json::JsonToArray(document, values);
  908. }
  909. template <typename T>
  910. inline bool fromJson(
  911. const std::string & json, std::list<T> & values)
  912. {
  913. tzc::json::JsonDoc document;
  914. document.Parse(json.c_str());
  915. if (document.HasParseError())
  916. {
  917. return false;
  918. }
  919. return tzc::json::JsonToArray(document, values);
  920. }
  921. inline std::string toJson(const std::vector<int> & list)
  922. {
  923. return tzc::json::BaseArrayToJson(list);
  924. }
  925. inline std::string toJson(const std::list<int> & list)
  926. {
  927. return tzc::json::BaseArrayToJson(list);
  928. }
  929. inline bool fromJson(
  930. const std::string & json, std::vector<int> & list)
  931. {
  932. tzc::json::JsonDoc document;
  933. document.Parse(json.c_str());
  934. if (document.HasParseError())
  935. {
  936. return false;
  937. }
  938. return tzc::json::JsonToBaseArray(document, list);
  939. }
  940. inline bool fromJson(
  941. const std::string & json, std::list<int> & list)
  942. {
  943. tzc::json::JsonDoc document;
  944. document.Parse(json.c_str());
  945. if (document.HasParseError())
  946. {
  947. return false;
  948. }
  949. return tzc::json::JsonToBaseArray(document, list);
  950. }
  951. inline std::string toJson(
  952. const std::vector<unsigned int> & list)
  953. {
  954. return tzc::json::BaseArrayToJson(list);
  955. }
  956. inline std::string toJson(
  957. const std::list<unsigned int> & list)
  958. {
  959. return tzc::json::BaseArrayToJson(list);
  960. }
  961. inline bool fromJson(
  962. const std::string & json, std::vector<unsigned int> & list)
  963. {
  964. tzc::json::JsonDoc document;
  965. document.Parse(json.c_str());
  966. if (document.HasParseError())
  967. {
  968. return false;
  969. }
  970. return tzc::json::JsonToBaseArray(document, list);
  971. }
  972. inline bool fromJson(
  973. const std::string & json, std::list<unsigned int> & list)
  974. {
  975. tzc::json::JsonDoc document;
  976. document.Parse(json.c_str());
  977. if (document.HasParseError())
  978. {
  979. return false;
  980. }
  981. return tzc::json::JsonToBaseArray(document, list);
  982. }
  983. inline std::string toJson(const std::vector<int64_t> & list)
  984. {
  985. return tzc::json::BaseArrayToJson(list);
  986. }
  987. inline std::string toJson(const std::list<int64_t> & list)
  988. {
  989. return tzc::json::BaseArrayToJson(list);
  990. }
  991. inline bool fromJson(
  992. const std::string & json, std::vector<int64_t> & list)
  993. {
  994. tzc::json::JsonDoc document;
  995. document.Parse(json.c_str());
  996. if (document.HasParseError())
  997. {
  998. return false;
  999. }
  1000. return tzc::json::JsonToBaseArray(document, list);
  1001. }
  1002. inline bool fromJson(
  1003. const std::string & json, std::list<int64_t> & list)
  1004. {
  1005. tzc::json::JsonDoc document;
  1006. document.Parse(json.c_str());
  1007. if (document.HasParseError())
  1008. {
  1009. return false;
  1010. }
  1011. return tzc::json::JsonToBaseArray(document, list);
  1012. }
  1013. inline std::string toJson(const std::vector<uint64_t> & list)
  1014. {
  1015. return tzc::json::BaseArrayToJson(list);
  1016. }
  1017. inline std::string toJson(const std::list<uint64_t> & list)
  1018. {
  1019. return tzc::json::BaseArrayToJson(list);
  1020. }
  1021. inline bool fromJson(
  1022. const std::string & json, std::vector<uint64_t> & list)
  1023. {
  1024. tzc::json::JsonDoc document;
  1025. document.Parse(json.c_str());
  1026. if (document.HasParseError())
  1027. {
  1028. return false;
  1029. }
  1030. return tzc::json::JsonToBaseArray(document, list);
  1031. }
  1032. inline bool fromJson(
  1033. const std::string & json, std::list<uint64_t> & list)
  1034. {
  1035. tzc::json::JsonDoc document;
  1036. document.Parse(json.c_str());
  1037. if (document.HasParseError())
  1038. {
  1039. return false;
  1040. }
  1041. return tzc::json::JsonToBaseArray(document, list);
  1042. }
  1043. inline std::string toJson(const std::vector<float> & list)
  1044. {
  1045. return tzc::json::BaseArrayToJson(list);
  1046. }
  1047. inline std::string toJson(const std::list<float> & list)
  1048. {
  1049. return tzc::json::BaseArrayToJson(list);
  1050. }
  1051. inline bool fromJson(const std::string & json, std::vector<float> & list)
  1052. {
  1053. tzc::json::JsonDoc document;
  1054. document.Parse(json.c_str());
  1055. if (document.HasParseError())
  1056. {
  1057. return false;
  1058. }
  1059. return tzc::json::JsonToBaseArray(document, list);
  1060. }
  1061. inline bool fromJson(
  1062. const std::string & json, std::list<float> & list)
  1063. {
  1064. tzc::json::JsonDoc document;
  1065. document.Parse(json.c_str());
  1066. if (document.HasParseError())
  1067. {
  1068. return false;
  1069. }
  1070. return tzc::json::JsonToBaseArray(document, list);
  1071. }
  1072. inline std::string toJson(const std::vector<double> & list)
  1073. {
  1074. return tzc::json::BaseArrayToJson(list);
  1075. }
  1076. inline std::string toJson(const std::list<double> & list)
  1077. {
  1078. return tzc::json::BaseArrayToJson(list);
  1079. }
  1080. inline bool fromJson(
  1081. const std::string & json, std::vector<double> & list)
  1082. {
  1083. tzc::json::JsonDoc document;
  1084. document.Parse(json.c_str());
  1085. if (document.HasParseError())
  1086. {
  1087. return false;
  1088. }
  1089. return tzc::json::JsonToBaseArray(document, list);
  1090. }
  1091. inline bool fromJson(const std::string & json, std::list<double> & list)
  1092. {
  1093. tzc::json::JsonDoc document;
  1094. document.Parse(json.c_str());
  1095. if (document.HasParseError())
  1096. {
  1097. return false;
  1098. }
  1099. return tzc::json::JsonToBaseArray(document, list);
  1100. }
  1101. inline std::string toJson(const std::vector<bool> & list)
  1102. {
  1103. return tzc::json::BaseArrayToJson(list);
  1104. }
  1105. inline std::string toJson(const std::list<bool> & list)
  1106. {
  1107. return tzc::json::BaseArrayToJson(list);
  1108. }
  1109. inline bool fromJson(const std::string & json, std::vector<bool> & list)
  1110. {
  1111. tzc::json::JsonDoc document;
  1112. document.Parse(json.c_str());
  1113. if (document.HasParseError())
  1114. {
  1115. return false;
  1116. }
  1117. return tzc::json::JsonToBaseArray(document, list);
  1118. }
  1119. inline bool fromJson(
  1120. const std::string & json, std::list<bool> & list)
  1121. {
  1122. tzc::json::JsonDoc document;
  1123. document.Parse(json.c_str());
  1124. if (document.HasParseError())
  1125. {
  1126. return false;
  1127. }
  1128. return tzc::json::JsonToBaseArray(document, list);
  1129. }
  1130. inline std::string toJson(const std::vector<std::string> & list)
  1131. {
  1132. return tzc::json::BaseArrayToJson(list);
  1133. }
  1134. inline std::string toJson(const std::list<std::string> & list)
  1135. {
  1136. return tzc::json::BaseArrayToJson(list);
  1137. }
  1138. inline bool fromJson(
  1139. const std::string & json, std::vector<std::string> & list)
  1140. {
  1141. tzc::json::JsonDoc document;
  1142. document.Parse(json.c_str());
  1143. if (document.HasParseError())
  1144. {
  1145. return false;
  1146. }
  1147. return tzc::json::JsonToBaseArray(document, list);
  1148. }
  1149. inline bool fromJson(
  1150. const std::string & json, std::list<std::string> & list)
  1151. {
  1152. tzc::json::JsonDoc document;
  1153. document.Parse(json.c_str());
  1154. if (document.HasParseError())
  1155. {
  1156. return false;
  1157. }
  1158. return tzc::json::JsonToBaseArray(document, list);
  1159. }
  1160. /**
  1161. * @brief Encapsulation a struct for bare array
  1162. */
  1163. template<typename T>
  1164. struct BareArray {
  1165. std::vector<T> Numbers;
  1166. std::string toJson() const
  1167. {
  1168. return tzc::json::toJson(Numbers);
  1169. }
  1170. static bool fromJson(
  1171. const std::string & json, BareArray & value)
  1172. {
  1173. return tzc::json::fromJson(json, value.Numbers);
  1174. }
  1175. };
  1176. template<>
  1177. struct BareArray <int> {
  1178. std::vector<int> Numbers;
  1179. std::string toJson() const
  1180. {
  1181. return tzc::json::toJson(Numbers);
  1182. }
  1183. static bool fromJson(
  1184. const std::string & json, BareArray & value)
  1185. {
  1186. return tzc::json::fromJson(json, value.Numbers);
  1187. }
  1188. };
  1189. template<>
  1190. struct BareArray <unsigned int> {
  1191. std::vector<unsigned int> Numbers;
  1192. std::string toJson() const
  1193. {
  1194. return tzc::json::toJson(Numbers);
  1195. }
  1196. static bool fromJson(
  1197. const std::string & json, BareArray<unsigned int> & value)
  1198. {
  1199. return tzc::json::fromJson(json, value.Numbers);
  1200. }
  1201. };
  1202. template<>
  1203. struct BareArray <int64_t> {
  1204. std::vector<int64_t> Numbers;
  1205. std::string toJson() const
  1206. {
  1207. return tzc::json::toJson(Numbers);
  1208. }
  1209. static bool fromJson(
  1210. const std::string & json, BareArray<int64_t> & value)
  1211. {
  1212. return tzc::json::fromJson(json, value.Numbers);
  1213. }
  1214. };
  1215. template<>
  1216. struct BareArray <uint64_t> {
  1217. std::vector<uint64_t> Numbers;
  1218. std::string toJson() const
  1219. {
  1220. return tzc::json::toJson(Numbers);
  1221. }
  1222. static bool fromJson(
  1223. const std::string & json, BareArray<uint64_t> & value)
  1224. {
  1225. return tzc::json::fromJson(json, value.Numbers);
  1226. }
  1227. };
  1228. template<>
  1229. struct BareArray <float> {
  1230. std::vector<float> Numbers;
  1231. std::string toJson() const
  1232. {
  1233. return tzc::json::toJson(Numbers);
  1234. }
  1235. static bool fromJson(
  1236. const std::string & json, BareArray<float> & value)
  1237. {
  1238. return tzc::json::fromJson(json, value.Numbers);
  1239. }
  1240. };
  1241. template<>
  1242. struct BareArray <double> {
  1243. std::vector<double> Numbers;
  1244. std::string toJson() const
  1245. {
  1246. return tzc::json::toJson(Numbers);
  1247. }
  1248. static bool fromJson(
  1249. const std::string & json, BareArray<double> & value)
  1250. {
  1251. return tzc::json::fromJson(json, value.Numbers);
  1252. }
  1253. };
  1254. template<>
  1255. struct BareArray <bool> {
  1256. std::vector<bool> Numbers;
  1257. std::string toJson() const
  1258. {
  1259. return tzc::json::toJson(Numbers);
  1260. }
  1261. static bool fromJson(
  1262. const std::string & json, BareArray<bool> & value)
  1263. {
  1264. return tzc::json::fromJson(json, value.Numbers);
  1265. }
  1266. };
  1267. template<>
  1268. struct BareArray <std::string> {
  1269. std::vector<std::string> Numbers;
  1270. std::string toJson() const
  1271. {
  1272. return tzc::json::toJson(Numbers);
  1273. }
  1274. static bool fromJson(const std::string & json,
  1275. BareArray<std::string> & value)
  1276. {
  1277. return tzc::json::fromJson(json, value.Numbers);
  1278. }
  1279. };
  1280. #if defined(LINUX) && (__WORDSIZE == 64)
  1281. inline bool setFiled(JsonDoc & doc,
  1282. const std::string & fildName, const long long & value)
  1283. {
  1284. auto & allocator = doc.GetAllocator();
  1285. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  1286. JsonValue((int64_t)value), allocator);
  1287. return true;
  1288. }
  1289. inline bool setFiled(JsonDoc & doc,
  1290. const std::string & fildName,
  1291. const unsigned long long & value)
  1292. {
  1293. auto & allocator = doc.GetAllocator();
  1294. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  1295. JsonValue((uint64_t)value), allocator);
  1296. return true;
  1297. }
  1298. inline long long getFiled(const JsonDoc & doc,
  1299. const std::string & fildName, const long long & defaultValue)
  1300. {
  1301. const char * pfildName = fildName.c_str();
  1302. JsonValue::ConstMemberIterator itr = doc.FindMember(pfildName);
  1303. if (itr != doc.MemberEnd())
  1304. {
  1305. if (itr->value.Is<int64_t>())
  1306. {
  1307. return (long long)itr->value.Get<int64_t>();
  1308. }
  1309. }
  1310. return defaultValue;
  1311. }
  1312. inline unsigned long long getFiled(const JsonDoc & doc,
  1313. const std::string & fildName,
  1314. const unsigned long long & defaultValue)
  1315. {
  1316. const char * pfildName = fildName.c_str();
  1317. JsonValue::ConstMemberIterator itr = doc.FindMember(pfildName);
  1318. if (itr != doc.MemberEnd())
  1319. {
  1320. if (itr->value.Is<uint64_t>())
  1321. {
  1322. return (unsigned long long)itr->value.Get<uint64_t>();
  1323. }
  1324. }
  1325. return defaultValue;
  1326. }
  1327. inline bool setFiledArray(JsonDoc & doc,
  1328. const std::string & fildName,
  1329. const std::vector<long long> & collection)
  1330. {
  1331. auto & allocator = doc.GetAllocator();
  1332. JsonDoc inner(&allocator);
  1333. inner.SetArray();
  1334. for (auto it = collection.begin(); it != collection.end(); ++it)
  1335. {
  1336. JsonValue ele((int64_t)(*it));
  1337. inner.PushBack(ele, allocator);
  1338. }
  1339. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  1340. inner, allocator);
  1341. return true;
  1342. }
  1343. inline bool setFiledArray(JsonDoc & doc,
  1344. const std::string & fildName,
  1345. const std::list<long long> & collection)
  1346. {
  1347. auto & allocator = doc.GetAllocator();
  1348. JsonDoc inner(&allocator);
  1349. inner.SetArray();
  1350. for (auto it = collection.begin(); it != collection.end(); ++it)
  1351. {
  1352. JsonValue ele((int64_t)(*it));
  1353. inner.PushBack(ele, allocator);
  1354. }
  1355. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  1356. inner, allocator);
  1357. return true;
  1358. }
  1359. inline bool setFiledArray(JsonDoc & doc, const std::string & fildName,
  1360. const std::vector<unsigned long long> & collection)
  1361. {
  1362. auto & allocator = doc.GetAllocator();
  1363. JsonDoc inner(&allocator);
  1364. inner.SetArray();
  1365. for (auto it = collection.begin(); it != collection.end(); ++it)
  1366. {
  1367. JsonValue ele((uint64_t)(*it));
  1368. inner.PushBack(ele, allocator);
  1369. }
  1370. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  1371. inner, allocator);
  1372. return true;
  1373. }
  1374. inline bool setFiledArray(JsonDoc & doc, const std::string & fildName,
  1375. const std::list<unsigned long long> & collection)
  1376. {
  1377. auto & allocator = doc.GetAllocator();
  1378. JsonDoc inner(&allocator);
  1379. inner.SetArray();
  1380. for (auto it = collection.begin(); it != collection.end(); ++it)
  1381. {
  1382. JsonValue ele((uint64_t)(*it));
  1383. inner.PushBack(ele, allocator);
  1384. }
  1385. doc.AddMember(JsonValue(fildName.c_str(), allocator),
  1386. inner, allocator);
  1387. return true;
  1388. }
  1389. inline bool ConverArray(JsonDoc & document, const char * name,
  1390. std::vector<long long> & value)
  1391. {
  1392. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  1393. if (itr != document.MemberEnd())
  1394. {
  1395. if (!itr->value.IsArray())
  1396. {
  1397. return false;
  1398. }
  1399. for (auto & v : itr->value.GetArray())
  1400. {
  1401. value.push_back(v.Get<int64_t>());
  1402. }
  1403. return true;
  1404. }
  1405. return false;
  1406. }
  1407. inline bool ConverArray(JsonDoc & document, const char * name,
  1408. std::list<long long> & value)
  1409. {
  1410. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  1411. if (itr != document.MemberEnd())
  1412. {
  1413. if (!itr->value.IsArray())
  1414. {
  1415. return false;
  1416. }
  1417. for (auto & v : itr->value.GetArray())
  1418. {
  1419. value.push_back(v.Get<int64_t>());
  1420. }
  1421. return true;
  1422. }
  1423. return false;
  1424. }
  1425. inline bool ConverArray(JsonDoc & document, const char * name,
  1426. std::vector<unsigned long long> & value)
  1427. {
  1428. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  1429. if (itr != document.MemberEnd())
  1430. {
  1431. if (!itr->value.IsArray())
  1432. {
  1433. return false;
  1434. }
  1435. for (auto & v : itr->value.GetArray())
  1436. {
  1437. value.push_back(v.Get<uint64_t>());
  1438. }
  1439. return true;
  1440. }
  1441. return false;
  1442. }
  1443. inline bool ConverArray(JsonDoc & document, const char * name,
  1444. std::list<unsigned long long> & value)
  1445. {
  1446. JsonValue::ConstMemberIterator itr = document.FindMember(name);
  1447. if (itr != document.MemberEnd())
  1448. {
  1449. if (!itr->value.IsArray())
  1450. {
  1451. return false;
  1452. }
  1453. for (auto & v : itr->value.GetArray())
  1454. {
  1455. value.push_back(v.Get<uint64_t>());
  1456. }
  1457. return true;
  1458. }
  1459. return false;
  1460. }
  1461. inline std::string BaseArrayToJson(
  1462. const std::vector<long long> & collection)
  1463. {
  1464. JsonDoc doc;
  1465. auto & allocator = doc.GetAllocator();
  1466. doc.SetArray();
  1467. for (auto it = collection.begin(); it != collection.end(); ++it)
  1468. {
  1469. JsonValue value((int64_t)(*it));
  1470. doc.PushBack(value, allocator);
  1471. }
  1472. return ValueToJson(doc);
  1473. }
  1474. inline std::string BaseArrayToJson(const std::list<long long> & collection)
  1475. {
  1476. JsonDoc doc;
  1477. auto & allocator = doc.GetAllocator();
  1478. doc.SetArray();
  1479. for (auto it = collection.begin(); it != collection.end(); ++it)
  1480. {
  1481. JsonValue value((int64_t)(*it));
  1482. doc.PushBack(value, allocator);
  1483. }
  1484. return ValueToJson(doc);
  1485. }
  1486. inline std::string BaseArrayToJson(const std::vector<unsigned long long> & collection)
  1487. {
  1488. JsonDoc doc;
  1489. auto & allocator = doc.GetAllocator();
  1490. doc.SetArray();
  1491. for (auto it = collection.begin(); it != collection.end(); ++it)
  1492. {
  1493. JsonValue value((uint64_t)(*it));
  1494. doc.PushBack(value, allocator);
  1495. }
  1496. return ValueToJson(doc);
  1497. }
  1498. inline std::string BaseArrayToJson(const std::list<unsigned long long> & collection)
  1499. {
  1500. JsonDoc doc;
  1501. auto & allocator = doc.GetAllocator();
  1502. doc.SetArray();
  1503. for (auto it = collection.begin(); it != collection.end(); ++it)
  1504. {
  1505. JsonValue value((uint64_t)(*it));
  1506. doc.PushBack(value, allocator);
  1507. }
  1508. return ValueToJson(doc);
  1509. }
  1510. inline bool JsonToBaseArray(JsonDoc & document, std::vector<long long> & collections)
  1511. {
  1512. if (!document.IsArray())
  1513. {
  1514. return false;
  1515. }
  1516. for (auto & val : document.GetArray())
  1517. {
  1518. if (!val.Is<int64_t>())
  1519. {
  1520. continue;
  1521. }
  1522. collections.emplace_back(val.Get<int64_t>());
  1523. }
  1524. return true;
  1525. }
  1526. inline bool JsonToBaseArray(JsonDoc & document, std::list<long long> & collections)
  1527. {
  1528. if (!document.IsArray())
  1529. {
  1530. return false;
  1531. }
  1532. for (auto & val : document.GetArray())
  1533. {
  1534. if (!val.Is<int64_t>())
  1535. {
  1536. continue;
  1537. }
  1538. collections.emplace_back(val.Get<int64_t>());
  1539. }
  1540. return true;
  1541. }
  1542. inline bool JsonToBaseArray(JsonDoc & document,
  1543. std::vector<unsigned long long> & collections)
  1544. {
  1545. if (!document.IsArray())
  1546. {
  1547. return false;
  1548. }
  1549. for (auto & val : document.GetArray())
  1550. {
  1551. if (!val.Is<uint64_t>())
  1552. {
  1553. continue;
  1554. }
  1555. collections.emplace_back(val.Get<uint64_t>());
  1556. }
  1557. return true;
  1558. }
  1559. inline bool JsonToBaseArray(JsonDoc & document,
  1560. std::list<unsigned long long> & collections)
  1561. {
  1562. if (!document.IsArray())
  1563. {
  1564. return false;
  1565. }
  1566. for (auto & val : document.GetArray())
  1567. {
  1568. if (!val.Is<uint64_t>())
  1569. {
  1570. continue;
  1571. }
  1572. collections.emplace_back(val.Get<uint64_t>());
  1573. }
  1574. return true;
  1575. }
  1576. inline bool setFiledParams(
  1577. JsonDoc & doc, const std::string & fildName,
  1578. const long long & value)
  1579. {
  1580. return tzc::json::setFiled(doc, fildName, value);
  1581. }
  1582. inline bool setFiledParams(
  1583. JsonDoc & doc, const std::string & fildName,
  1584. const unsigned long long & value)
  1585. {
  1586. return tzc::json::setFiled(doc, fildName, value);
  1587. }
  1588. inline bool setFiledParams(
  1589. JsonDoc & doc, const std::string & fildName,
  1590. const std::vector<long long> & value)
  1591. {
  1592. return tzc::json::setFiledArray(doc, fildName, value);
  1593. }
  1594. inline bool setFiledParams(
  1595. JsonDoc & doc, const std::string & fildName,
  1596. const std::list<long long> & value)
  1597. {
  1598. std::vector<int64_t> vecValue(value.begin(), value.end());
  1599. return tzc::json::setFiledArray(doc, fildName, vecValue);
  1600. }
  1601. inline bool setFiledParams(
  1602. JsonDoc & doc, const std::string & fildName,
  1603. const std::vector<unsigned long long> & value)
  1604. {
  1605. return tzc::json::setFiledArray(doc, fildName, value);
  1606. }
  1607. inline bool setFiledParams(
  1608. JsonDoc & doc, const std::string & fildName,
  1609. const std::list<unsigned long long> & value)
  1610. {
  1611. std::vector<uint64_t> vecValue(value.begin(), value.end());
  1612. return tzc::json::setFiledArray(doc, fildName, vecValue);
  1613. }
  1614. inline bool getFiledParams(
  1615. JsonDoc & doc, const std::string & fildName,
  1616. long long & value)
  1617. {
  1618. value = tzc::json::getFiled(doc, fildName, (int64_t)(0));
  1619. return true;
  1620. }
  1621. inline bool getFiledParams(
  1622. JsonDoc & doc, const std::string & fildName,
  1623. unsigned long long & value)
  1624. {
  1625. value = tzc::json::getFiled(doc, fildName, (uint64_t)(0));
  1626. return true;
  1627. }
  1628. inline bool getFiledParams(
  1629. JsonDoc & doc, const std::string & fildName,
  1630. std::list<long long> & value)
  1631. {
  1632. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  1633. }
  1634. inline bool getFiledParams(
  1635. JsonDoc & doc, const std::string & fildName,
  1636. std::vector<long long> & value)
  1637. {
  1638. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  1639. }
  1640. inline bool getFiledParams(
  1641. JsonDoc & doc, const std::string & fildName,
  1642. std::list<unsigned long long> & value)
  1643. {
  1644. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  1645. }
  1646. inline bool getFiledParams(
  1647. JsonDoc & doc, const std::string & fildName,
  1648. std::vector<unsigned long long> & value)
  1649. {
  1650. return tzc::json::ConverArray(doc, fildName.c_str(), value);
  1651. }
  1652. inline std::string toJson(const std::vector<long long> & list)
  1653. {
  1654. return tzc::json::BaseArrayToJson(list);
  1655. }
  1656. inline std::string toJson(const std::list<long long> & list)
  1657. {
  1658. return tzc::json::BaseArrayToJson(list);
  1659. }
  1660. inline bool fromJson(const std::string & json,
  1661. std::vector<long long> & list)
  1662. {
  1663. tzc::json::JsonDoc document;
  1664. document.Parse(json.c_str());
  1665. if (document.HasParseError())
  1666. {
  1667. return false;
  1668. }
  1669. return tzc::json::JsonToBaseArray(document, list);
  1670. }
  1671. inline bool fromJson(const std::string & json,
  1672. std::list<long long> & list)
  1673. {
  1674. tzc::json::JsonDoc document;
  1675. document.Parse(json.c_str());
  1676. if (document.HasParseError())
  1677. {
  1678. return false;
  1679. }
  1680. return tzc::json::JsonToBaseArray(document, list);
  1681. }
  1682. inline std::string toJson(
  1683. const std::vector<unsigned long long> & list)
  1684. {
  1685. return tzc::json::BaseArrayToJson(list);
  1686. }
  1687. inline std::string toJson(
  1688. const std::list<unsigned long long> & list)
  1689. {
  1690. return tzc::json::BaseArrayToJson(list);
  1691. }
  1692. inline bool fromJson(const std::string & json,
  1693. std::vector<unsigned long long> & list)
  1694. {
  1695. tzc::json::JsonDoc document;
  1696. document.Parse(json.c_str());
  1697. if (document.HasParseError())
  1698. {
  1699. return false;
  1700. }
  1701. return tzc::json::JsonToBaseArray(document, list);
  1702. }
  1703. inline bool fromJson(const std::string & json,
  1704. std::list<unsigned long long> & list)
  1705. {
  1706. tzc::json::JsonDoc document;
  1707. document.Parse(json.c_str());
  1708. if (document.HasParseError())
  1709. {
  1710. return false;
  1711. }
  1712. return tzc::json::JsonToBaseArray(document, list);
  1713. }
  1714. template<>
  1715. struct BareArray <long long> {
  1716. std::vector<long long> Numbers;
  1717. std::string toJson() const
  1718. {
  1719. return tzc::json::toJson(Numbers);
  1720. }
  1721. static bool fromJson(const std::string & json, BareArray & value)
  1722. {
  1723. return tzc::json::fromJson(json, value.Numbers);
  1724. }
  1725. };
  1726. template<>
  1727. struct BareArray <unsigned long long> {
  1728. std::vector<unsigned long long> Numbers;
  1729. std::string toJson() const
  1730. {
  1731. return tzc::json::toJson(Numbers);
  1732. }
  1733. static bool fromJson(const std::string & json, BareArray & value)
  1734. {
  1735. return tzc::json::fromJson(json, value.Numbers);
  1736. }
  1737. };
  1738. #endif
  1739. } // namespace json
  1740. } // namespace tzc
  1741. #endif