#pragma once #ifdef WIN32 #include #endif #include "cJSON.h" #include #include namespace gb { class json { cJSON *obj_; cJSON* cur_child_; bool is_array_; cJSON* find_sibling(cJSON* first, const char* name, cJSON*** addr); cJSON* find_child(cJSON *parent, std::vector& path, bool create, cJSON*** addr = NULL); cJSON* find(const char* path, bool create = false, cJSON*** addr = NULL); public: json(char* json_txt = 0); ~json(); static std::string to_string(cJSON* root, bool formatted); static std::string get_value_as_string(cJSON* root, bool integer = false); static void free_node_data(cJSON* node); static cJSON* create_element_with_name(const char* name); public: bool attach_text(char* json_txt); bool attach_cjson(cJSON* cjson); bool create_empty(bool array = false); void clear(void); std::string to_string(bool formatted); // can be path: child/value ... bool get_value(const char* key, bool& val); bool get_value(const char* key, int& val); bool get_value(const char* key, double& val); bool get_value(const char* key, std::string& val); bool get_value(const char* key, json*& val); // caller shoud call "delete" to free the returned object !!! bool get_value_as_string(const char* key, std::string& val, bool integer); bool get_as_array(const char* key, std::vector& val); bool first_child(std::string& val, std::string* name = NULL); bool next_child(std::string& val, std::string* name = NULL); bool set_value(const char* key, bool val); bool set_value(const char* key, int val); bool set_value(const char* key, double val); bool set_value(const char* key, std::string val); bool set_value(const char* key, const char* val); bool set_value(const char* key, json* obj); bool remove(const char* key); }; class base64 { char base64_ind_[128]; char base64_char_[80]; char padding_char_; bool is_valid_base64_table(const char* table); bool initialize_base64_table(const char* table); public: base64(); ~base64(); public: bool set_base64_table(const char* table = NULL); std::string encode(const char* data, size_t bytes, unsigned int line_bytes = -1, bool need_padding = true); std::string decode(const char* data, size_t bytes); }; }