JSONTransformConfig.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #pragma once
  2. #include "TransformConfig.h"
  3. #include "cJSON.h"
  4. namespace bell {
  5. class JSONTransformConfig : public bell::TransformConfig {
  6. private:
  7. cJSON* json;
  8. public:
  9. JSONTransformConfig(cJSON* body) { this->json = body; };
  10. ~JSONTransformConfig(){};
  11. std::string rawGetString(const std::string& field) override {
  12. cJSON* value = cJSON_GetObjectItem(json, field.c_str());
  13. if (value != NULL && cJSON_IsString(value)) {
  14. return std::string(value->valuestring);
  15. }
  16. return "invalid";
  17. }
  18. std::vector<int> rawGetIntArray(const std::string& field) override {
  19. std::vector<int> result;
  20. cJSON* value = cJSON_GetObjectItem(json, field.c_str());
  21. if (value != NULL && cJSON_IsArray(value)) {
  22. for (int i = 0; i < cJSON_GetArraySize(value); i++) {
  23. cJSON* item = cJSON_GetArrayItem(value, i);
  24. if (item != NULL && cJSON_IsNumber(item)) {
  25. result.push_back(item->valueint);
  26. }
  27. }
  28. }
  29. return result;
  30. }
  31. std::vector<float> rawGetFloatArray(const std::string& field) override {
  32. std::vector<float> result;
  33. cJSON* value = cJSON_GetObjectItem(json, field.c_str());
  34. if (value != NULL && cJSON_IsArray(value)) {
  35. for (int i = 0; i < cJSON_GetArraySize(value); i++) {
  36. cJSON* item = cJSON_GetArrayItem(value, i);
  37. if (item != NULL && cJSON_IsNumber(item)) {
  38. result.push_back(item->valuedouble);
  39. }
  40. }
  41. }
  42. return result;
  43. }
  44. int rawGetInt(const std::string& field) override {
  45. cJSON* value = cJSON_GetObjectItem(json, field.c_str());
  46. if (value != NULL && cJSON_IsNumber(value)) {
  47. return (int)value->valueint;
  48. }
  49. return invalidInt;
  50. }
  51. bool isArray(const std::string& field) override {
  52. cJSON* value = cJSON_GetObjectItem(json, field.c_str());
  53. if (value != NULL && cJSON_IsArray(value)) {
  54. return true;
  55. }
  56. return false;
  57. }
  58. float rawGetFloat(const std::string& field) override {
  59. cJSON* value = cJSON_GetObjectItem(json, field.c_str());
  60. if (value != NULL && cJSON_IsNumber(value)) {
  61. return (float)value->valuedouble;
  62. }
  63. return invalidInt;
  64. }
  65. };
  66. } // namespace bell