| | |
| | | return json; |
| | | } |
| | | |
| | | char *make_get_request(const char *topic, const std::map<string, string> *query_params) { |
| | | yyjson_mut_doc *doc = yyjson_mut_doc_new(NULL); |
| | | yyjson_mut_val *root = yyjson_mut_obj(doc); |
| | | yyjson_mut_obj_add_strn(doc, root, "path", topic, strlen(topic)); |
| | | yyjson_mut_obj_add_strn(doc, root, "method", "GET", 3); |
| | | |
| | | // 填充请求参数 |
| | | if (query_params != NULL) { |
| | | yyjson_mut_val *query_map = yyjson_mut_obj(doc); |
| | | |
| | | std::map<string, string> t_map = *query_params; |
| | | std::map<string, string>::iterator iter; |
| | | for (iter = t_map.begin(); iter != t_map.end(); iter++) { |
| | | yyjson_mut_val *_key = yyjson_mut_str(doc, iter->first.c_str()); |
| | | |
| | | yyjson_mut_val *param = yyjson_mut_arr(doc); |
| | | yyjson_mut_val *_val = yyjson_mut_str(doc, iter->second.c_str()); |
| | | yyjson_mut_arr_append(param, _val); |
| | | |
| | | yyjson_mut_obj_add(query_map, _key, param); |
| | | } |
| | | |
| | | yyjson_mut_val *query_map_key = yyjson_mut_str(doc, "queryMap"); |
| | | yyjson_mut_obj_add(root, query_map_key, query_map); |
| | | } |
| | | |
| | | yyjson_mut_doc_set_root(doc, root); |
| | | |
| | | size_t jsonl = 0; |
| | | char *json = yyjson_mut_val_write(root, 0, &jsonl); |
| | | |
| | | yyjson_mut_doc_free(doc); |
| | | |
| | | return json; |
| | | } |
| | | |
| | | extern "C" int bus_dbapi_get_json_data_by_key(const char * json, const char *flag_key, |
| | | const char *data_key, char ** pptr_data, |
| | | yyjson_type *ptr_type) |
| | | { |
| | | int ret = -1; |
| | | size_t data_len = 0; |
| | | const char * ptr_value = NULL; |
| | | const char * success_name = flag_key; |
| | | const char * data_name = data_key; |
| | | const char * msg_name = "msg"; |
| | | |
| | | if(NULL == *pptr_data) |
| | | { |
| | | return -1; |
| | | } |
| | | |
| | | |
| | | // Read JSON and get root |
| | | yyjson_doc *doc = yyjson_read(json, strlen(json), 0); |
| | | yyjson_val *root = yyjson_doc_get_root(doc); |
| | | |
| | | if ( NULL != success_name ) |
| | | { |
| | | // Get root["success"] |
| | | yyjson_val *success = yyjson_obj_get(root, success_name); |
| | | |
| | | int success_val = yyjson_get_bool(success); |
| | | printf("success: %d\n", success_val); |
| | | if(!success_val) |
| | | { |
| | | yyjson_doc_free(doc); |
| | | return -1; |
| | | } |
| | | } |
| | | |
| | | // Get root["msg"] |
| | | //yyjson_val *msg = yyjson_obj_get(root, "msg"); |
| | | yyjson_val *msg = yyjson_obj_get(root, "msg"); |
| | | printf("msg: %s\n", yyjson_get_str(msg)); |
| | | |
| | | // Get root["data"] |
| | | //yyjson_val *msg = yyjson_obj_get(root, "data"); |
| | | yyjson_val *data = yyjson_obj_get(root, data_name); |
| | | |
| | | *ptr_type = yyjson_get_type(data); |
| | | ptr_value = yyjson_val_write(data, YYJSON_WRITE_NOFLAG, &data_len); |
| | | printf("%s: %s\n", data_name, ptr_value); |
| | | printf("len: %lu\n", data_len); |
| | | |
| | | memcpy(*pptr_data, ptr_value, data_len); |
| | | ret = 0; |
| | | |
| | | // Free the doc |
| | | yyjson_doc_free(doc); |
| | | |
| | | // All functions accept NULL input, and return NULL on error. |
| | | return ret; |
| | | } |
| | | |
| | | extern "C" int bus_dbapi_get_json_data(const char *json, char **pptr_data, yyjson_type *ptr_type) { |
| | | /*{ |
| | | "success": true, |
| | |
| | | "msg": "", |
| | | "success": true |
| | | }*/ |
| | | int ret = -1; |
| | | size_t data_len = 0; |
| | | const char *ptr_value = NULL; |
| | | const char *success_name = "success"; |
| | | const char *msg_name = "msg"; |
| | | const char * data_name = "data"; |
| | | |
| | | if (NULL == *pptr_data) { |
| | | return -1; |
| | | } |
| | | |
| | | // Read JSON and get root |
| | | yyjson_doc *doc = yyjson_read(json, strlen(json), 0); |
| | | yyjson_val *root = yyjson_doc_get_root(doc); |
| | | |
| | | // Get root["success"] |
| | | yyjson_val *success = yyjson_obj_get(root, success_name); |
| | | |
| | | int success_val = yyjson_get_bool(success); |
| | | printf("success: %d\n", success_val); |
| | | if (!success_val) { |
| | | yyjson_doc_free(doc); |
| | | return -1; |
| | | } |
| | | |
| | | // Get root["msg"] |
| | | // yyjson_val *msg = yyjson_obj_get(root, "msg"); |
| | | yyjson_val *msg = yyjson_obj_get(root, "msg"); |
| | | printf("msg: %s\n", yyjson_get_str(msg)); |
| | | |
| | | // Get root["data"] |
| | | // yyjson_val *msg = yyjson_obj_get(root, "data"); |
| | | yyjson_val *data = yyjson_obj_get(root, "data"); |
| | | |
| | | *ptr_type = yyjson_get_type(data); |
| | | ptr_value = yyjson_val_write(data, YYJSON_WRITE_NOFLAG, &data_len); |
| | | printf("data: %s\n", ptr_value); |
| | | printf("len: %lu\n", data_len); |
| | | |
| | | memcpy(*pptr_data, ptr_value, data_len); |
| | | ret = 0; |
| | | |
| | | // Free the doc |
| | | yyjson_doc_free(doc); |
| | | |
| | | // All functions accept NULL input, and return NULL on error. |
| | | return ret; |
| | | return bus_dbapi_get_json_data_by_key(json, success_name, data_name, pptr_data, ptr_type); |
| | | } |
| | | |
| | | bool bus_dbapi_get_topic_data(void *handle, const char *topic, crepmsg **pptr_repmsg, size_t len) { |