jsonBuilder.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #include "jsonBuilder.h"
  2. #include <rapidjson/writer.h>
  3. #include <rapidjson/stringbuffer.h>
  4. #include <rapidjson/prettywriter.h>
  5. #include "constdef.h"
  6. namespace YA
  7. {
  8. jsonBuilder::jsonBuilder()
  9. {
  10. }
  11. jsonBuilder::~jsonBuilder()
  12. {
  13. }
  14. void jsonBuilder::__AddVersion( rapidjson::Value& root, rapidjson::Document::AllocatorType& allocator )
  15. {
  16. rapidjson::Value key( rapidjson::kStringType );
  17. rapidjson::Value value( rapidjson::kStringType );
  18. key.SetString( JSON_ROOT_KEY_VERSION, allocator );
  19. value.SetString( JASON_CURRENT_VERSION, allocator );
  20. root.AddMember( key, value, allocator );
  21. }
  22. std::string jsonBuilder::BuildLogin( const _JS_LOGIN_& Login )
  23. {
  24. rapidjson::StringBuffer sb;
  25. rapidjson::Writer<rapidjson::StringBuffer> writer( sb );
  26. rapidjson::Document doc;
  27. rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
  28. rapidjson::Value root( rapidjson::kObjectType );
  29. rapidjson::Value child( rapidjson::kObjectType );
  30. rapidjson::Value key( rapidjson::kStringType );
  31. rapidjson::Value value( rapidjson::kStringType );
  32. key.SetString( JSON_ROOT_KEY_CMD, allocator );
  33. value.SetString( JASON_CMD_LOGIN, allocator );
  34. root.AddMember( key, value, allocator );
  35. key.SetString( JSON_KEY_USERNAME, allocator );
  36. value.SetString( Login.user_name.c_str(), allocator );
  37. child.AddMember( key, value, allocator );
  38. key.SetString( JSON_KEY_PASSWORD, allocator );
  39. value.SetString( Login.user_password.c_str(), allocator );
  40. child.AddMember( key, value, allocator );
  41. key.SetString( JSON_ROOT_KEY_DATA, allocator );
  42. root.AddMember( key, child, allocator );
  43. root.Accept( writer );
  44. return sb.GetString();
  45. }
  46. bool jsonBuilder::ParseCall_Card_Req( const std::string& JasonText, _JS_CALL_CARD_REQ_& CallCardReq, std::string& Error )
  47. {
  48. rapidjson::Document doc;
  49. if ( doc.Parse( JasonText.c_str() ).HasParseError() )
  50. {
  51. Error = "Failed to parse jason text!";
  52. return false;
  53. }
  54. rapidjson::Value::MemberIterator itValue;
  55. itValue = doc.FindMember( "data" );
  56. if ( itValue == doc.MemberEnd() )
  57. {
  58. Error = "Failed to find member: data!";
  59. return false;
  60. }
  61. rapidjson::Value Data;
  62. rapidjson::Document::AllocatorType allocator;
  63. Data.CopyFrom( itValue->value, allocator );
  64. if ( !Data.HasMember( JSON_KEY_CALL_CARD_CALL_TYPE ) )
  65. {
  66. Error = "Failed to find value: ";
  67. Error += JSON_KEY_CALL_CARD_CALL_TYPE;
  68. return false;
  69. }
  70. CallCardReq.call_type_id = Data[JSON_KEY_CALL_CARD_CALL_TYPE].GetInt();
  71. if ( !Data.HasMember( JSON_KEY_CALL_CARD_CALL_TIME_OUT ) )
  72. {
  73. Error = "Failed to find value: ";
  74. Error += JSON_KEY_CALL_CARD_CALL_TIME_OUT;
  75. return false;
  76. }
  77. CallCardReq.call_time_out = Data[JSON_KEY_CALL_CARD_CALL_TIME_OUT].GetInt();
  78. if ( !Data.HasMember( JSON_KEY_CALL_CARD_CALL_LEVEL ) )
  79. {
  80. Error = "Failed to find value: ";
  81. Error += JSON_KEY_CALL_CARD_CALL_LEVEL;
  82. return false;
  83. }
  84. CallCardReq.call_time_interval = Data[JSON_KEY_CALL_CARD_CALL_LEVEL].GetInt();
  85. if ( !Data.HasMember( JSON_KEY_CALL_CARD_USER_NAME ) )
  86. {
  87. Error = "Failed to find value: ";
  88. Error += JSON_KEY_CALL_CARD_USER_NAME;
  89. return false;
  90. }
  91. CallCardReq.user_name = Data[JSON_KEY_CALL_CARD_USER_NAME].GetString();
  92. //data::stations
  93. if ( !Data.HasMember( JSON_KEY_CALL_CARD_STATIONS ) )
  94. {
  95. Error = "Failed to find value: ";
  96. Error += JSON_KEY_CALL_CARD_STATIONS;
  97. return false;
  98. }
  99. rapidjson::Value & stations = Data[JSON_KEY_CALL_CARD_STATIONS];
  100. if ( !stations.IsArray() )
  101. {
  102. Error = "data::stations is not a valid array!";
  103. return false;
  104. }
  105. for ( int i = 0; i <(int) stations.Size(); ++i )
  106. {
  107. rapidjson::Value & v = stations[i];
  108. if ( !v.IsObject() )
  109. {
  110. char szError[1024] = { 0 };
  111. sprintf( szError, "data::stations[%d] is not a object!", i );
  112. Error = szError;
  113. return false;
  114. }
  115. _JS_STATION_ Station;
  116. if ( !v.HasMember( JSON_KEY_CALL_CARD_STATION_ID ) && v[JSON_KEY_CALL_CARD_STATION_ID].IsInt() )
  117. {
  118. Error = "Error, failed to found value: ";
  119. Error += JSON_KEY_CALL_CARD_STATION_ID;
  120. return false;
  121. }
  122. Station.stationid = v[JSON_KEY_CALL_CARD_STATION_ID].GetInt();
  123. CallCardReq.stations.push_back( Station );
  124. }
  125. //data::cards
  126. if ( !Data.HasMember( JSON_KEY_CALL_CARD_CARDS ) )
  127. {
  128. Error = "Failed to find value: ";
  129. Error += JSON_KEY_CALL_CARD_CARDS;
  130. return false;
  131. }
  132. rapidjson::Value & cards = Data[JSON_KEY_CALL_CARD_CARDS];
  133. for ( int i = 0; i < (int)cards.Size(); ++i )
  134. {
  135. rapidjson::Value & v = cards[i];
  136. if ( !v.IsObject() )
  137. {
  138. char szError[1024] = { 0 };
  139. sprintf( szError, "data::cards[%d] is not a object!", i );
  140. Error = szError;
  141. return false;
  142. }
  143. _JS_CARD_ Card;
  144. if ( !v.HasMember( JSON_KEY_CALL_CARD_CARD_ID ) && v[JSON_KEY_CALL_CARD_CARD_ID].IsInt() )
  145. {
  146. Error = "Error, failed to found value: ";
  147. Error += JSON_KEY_CALL_CARD_CARD_ID;
  148. return false;
  149. }
  150. Card.cardid = v[JSON_KEY_CALL_CARD_CARD_ID].GetInt();
  151. if ( !v.HasMember( JSON_KEY_CALL_CARD_CARD_TYPE_ID ) && v[JSON_KEY_CALL_CARD_CARD_TYPE_ID].IsInt() )
  152. {
  153. Error = "Error, failed to found value: ";
  154. Error += JSON_KEY_CALL_CARD_CARD_TYPE_ID;
  155. return false;
  156. }
  157. Card.cardtype = v[JSON_KEY_CALL_CARD_CARD_TYPE_ID].GetInt();
  158. CallCardReq.cards.push_back( Card );
  159. }
  160. return true;
  161. }
  162. }