NettyHttpResultMsg.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. * @Description:
  3. * @Version: 1.0
  4. * @Autor: lishengyin
  5. * @Date: 2021-11-03 15:16:14
  6. * @LastEditors: lishengyin
  7. * @LastEditTime: 2021-11-11 17:02:12
  8. */
  9. #pragma once
  10. #include <iostream>
  11. #include <rapidjson/document.h>
  12. #include <rapidjson/rapidjson.h>
  13. #include <rapidjson/stringbuffer.h>
  14. #include <rapidjson/writer.h>
  15. #include <vector>
  16. #include "Notices.h"
  17. using namespace std;
  18. template <typename T1, typename T2>
  19. class NettyHttpResultMsg
  20. {
  21. public:
  22. std::string code;
  23. std::string msg;
  24. vector<T1> datas;
  25. vector<T2> extendDatas;
  26. bool notOk;
  27. bool ok;
  28. public:
  29. NettyHttpResultMsg() {}
  30. ~NettyHttpResultMsg() {}
  31. /**
  32. * @description: json转码为对象
  33. * @param {const std::string& json} json数据
  34. * @return {*}
  35. */
  36. bool jsonToObject(const std::string& json)
  37. {
  38. rapidjson::Document doc;
  39. if (doc.Parse<rapidjson::kParseCommentsFlag>(json.c_str()).HasParseError()) {
  40. return false;
  41. }
  42. // get members
  43. const auto end = doc.MemberEnd();
  44. if (end == doc.FindMember("code") || !doc["code"].IsString()) {
  45. return false;
  46. } else {
  47. code = doc["code"].GetString();
  48. }
  49. if (end == doc.FindMember("notOk") || !doc["notOk"].IsBool()) {
  50. return false;
  51. } else {
  52. notOk = doc["notOk"].GetBool();
  53. }
  54. if (end == doc.FindMember("ok") || !doc["ok"].IsBool()) {
  55. return false;
  56. } else {
  57. ok = doc["ok"].GetBool();
  58. }
  59. if (end != doc.FindMember("data")) {
  60. if(doc["data"].IsObject()){
  61. T1 data;
  62. const rapidjson::Value& object = doc["data"];
  63. if(!(data.jsonToObject(object))){
  64. return false;
  65. }
  66. datas.push_back(data);
  67. }else if(doc["data"].IsArray()){
  68. const rapidjson::Value& objs = doc["data"];
  69. for (size_t i = 0; i < objs.Size(); i++) {
  70. const rapidjson::Value& obj = objs[i];
  71. T1 data;
  72. if(!(data.jsonToObject(obj))){
  73. return false;
  74. }
  75. datas.push_back(data);
  76. }
  77. }
  78. }
  79. if (end != doc.FindMember("extendData")) {
  80. if(doc["extendData"].IsObject()){
  81. T2 extendData;
  82. const rapidjson::Value& object = doc["extendData"];
  83. if(!(extendData.jsonToObject(object))){
  84. return false;
  85. }
  86. extendDatas.push_back(extendData);
  87. }else if(doc["extendData"].IsArray()){
  88. const rapidjson::Value& objs = doc["extendData"];
  89. for (size_t i = 0; i < objs.Size(); ++i) {
  90. const rapidjson::Value& obj = objs[i];
  91. T2 extendData;
  92. if(!(extendData.jsonToObject(obj))){
  93. return false;
  94. }
  95. extendDatas.push_back(extendData);
  96. }
  97. }
  98. }
  99. if (end == doc.FindMember("ok")) {
  100. return false;
  101. } else {
  102. ok = doc["ok"].GetBool();
  103. }
  104. return true;
  105. }
  106. };