1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #pragma once
- #include "TransformConfig.h"
- #include "cJSON.h"
- namespace bell {
- class JSONTransformConfig : public bell::TransformConfig {
- private:
- cJSON* json;
- public:
- JSONTransformConfig(cJSON* body) { this->json = body; };
- ~JSONTransformConfig(){};
- std::string rawGetString(const std::string& field) override {
- cJSON* value = cJSON_GetObjectItem(json, field.c_str());
- if (value != NULL && cJSON_IsString(value)) {
- return std::string(value->valuestring);
- }
- return "invalid";
- }
- std::vector<int> rawGetIntArray(const std::string& field) override {
- std::vector<int> result;
- cJSON* value = cJSON_GetObjectItem(json, field.c_str());
- if (value != NULL && cJSON_IsArray(value)) {
- for (int i = 0; i < cJSON_GetArraySize(value); i++) {
- cJSON* item = cJSON_GetArrayItem(value, i);
- if (item != NULL && cJSON_IsNumber(item)) {
- result.push_back(item->valueint);
- }
- }
- }
- return result;
- }
- std::vector<float> rawGetFloatArray(const std::string& field) override {
- std::vector<float> result;
- cJSON* value = cJSON_GetObjectItem(json, field.c_str());
- if (value != NULL && cJSON_IsArray(value)) {
- for (int i = 0; i < cJSON_GetArraySize(value); i++) {
- cJSON* item = cJSON_GetArrayItem(value, i);
- if (item != NULL && cJSON_IsNumber(item)) {
- result.push_back(item->valuedouble);
- }
- }
- }
- return result;
- }
- int rawGetInt(const std::string& field) override {
- cJSON* value = cJSON_GetObjectItem(json, field.c_str());
- if (value != NULL && cJSON_IsNumber(value)) {
- return (int)value->valueint;
- }
- return invalidInt;
- }
- bool isArray(const std::string& field) override {
- cJSON* value = cJSON_GetObjectItem(json, field.c_str());
- if (value != NULL && cJSON_IsArray(value)) {
- return true;
- }
- return false;
- }
- float rawGetFloat(const std::string& field) override {
- cJSON* value = cJSON_GetObjectItem(json, field.c_str());
- if (value != NULL && cJSON_IsNumber(value)) {
- return (float)value->valuedouble;
- }
- return invalidInt;
- }
- };
- } // namespace bell
|