| | |
| | | return json; |
| | | } |
| | | |
| | | char *make_get_request(const char *topic, const std::map<string, string> *query_params) { |
| | | char *make_get_request(const char *topic, 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) { |
| | | if (!query_params.empty()) { |
| | | yyjson_mut_val *query_map = yyjson_mut_obj(doc); |
| | | |
| | | std::map<string, string> t_map = *query_params; |
| | | // std::map<string, string> t_map = *query_params; |
| | | std::map<string, string>::iterator iter; |
| | | for (iter = t_map.begin(); iter != t_map.end(); iter++) { |
| | | for (iter = query_params.begin(); iter != query_params.end(); iter++) { |
| | | yyjson_mut_val *_key = yyjson_mut_str(doc, iter->first.c_str()); |
| | | |
| | | yyjson_mut_val *param = yyjson_mut_arr(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) |
| | | { |
| | | 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) |
| | | { |
| | | 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); |
| | | 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; |
| | | } |
| | | 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)); |
| | | 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); |
| | | 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); |
| | | 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; |
| | | } |
| | |
| | | "success": true |
| | | }*/ |
| | | const char *success_name = "success"; |
| | | const char * data_name = "data"; |
| | | const char *data_name = "data"; |
| | | |
| | | if (NULL == *pptr_data) { |
| | | return -1; |
| | |
| | | bool bus_dbapi_get_topic_data(void *handle, const char *topic, crepmsg **pptr_repmsg, size_t len) { |
| | | const auto topicl = strlen(topic); |
| | | auto reqData = make_get_request(topic); |
| | | auto reqmsg = make_req_msg(topic, topicl, reqData, strlen(reqData)); |
| | | |
| | | if (bus_client_request(handle, reqmsg, pptr_repmsg)) { |
| | | printf("======>> bus_client_reqest [%s] get [%s]\n", topic, (*pptr_repmsg)->data); |
| | | } else { |
| | | free(reqData); |
| | | return false; |
| | | } |
| | | |
| | | len = strlen((*pptr_repmsg)->data) + 1; |
| | | |
| | | free(reqData); |
| | | return true; |
| | | } |
| | | |
| | | bool bus_dbapi_get_topic_data(void *handle, const char *topic, crepmsg **pptr_repmsg, size_t len, std::map<string, string> ¶ms) { |
| | | const auto topicl = strlen(topic); |
| | | auto reqData = make_get_request(topic, params); |
| | | auto reqmsg = make_req_msg(topic, topicl, reqData, strlen(reqData)); |
| | | |
| | | if (bus_client_request(handle, reqmsg, pptr_repmsg)) { |
| | |
| | | 修改内容 : 新生成函数 |
| | | |
| | | *****************************************************************************/ |
| | | int get_value_by_key(char *json, const char *key, char **pptr_data) |
| | | { |
| | | int get_value_by_key(char *json, const char *key, char **pptr_data) { |
| | | size_t data_len = 0; |
| | | |
| | | |
| | | // Read JSON and get root |
| | | yyjson_doc *doc = yyjson_read(json, strlen(json), 0); |
| | | yyjson_val *root = yyjson_doc_get_root(doc); |
| | | |
| | | // Get root[key] |
| | | yyjson_val *val = yyjson_obj_get(root, key); |
| | | |
| | | char * val_str = (char *)yyjson_get_str(val); |
| | | printf("val: %s\n", val_str); |
| | | if(NULL == val_str) |
| | | { |
| | | yyjson_doc_free(doc); |
| | | return -1; |
| | | } |
| | | yyjson_doc *doc = yyjson_read(json, strlen(json), 0); |
| | | yyjson_val *root = yyjson_doc_get_root(doc); |
| | | |
| | | // Get root[key] |
| | | yyjson_val *val = yyjson_obj_get(root, key); |
| | | |
| | | char *ptr_value = yyjson_val_write(val, YYJSON_WRITE_NOFLAG, &data_len); |
| | | printf("data: %s\n", ptr_value); |
| | | printf("len: %lu\n", data_len); |
| | | char *val_str = (char *)yyjson_get_str(val); |
| | | printf("val: %s\n", val_str); |
| | | if (NULL == val_str) { |
| | | yyjson_doc_free(doc); |
| | | return -1; |
| | | } |
| | | |
| | | *pptr_data = (char *)malloc(data_len); |
| | | memset(*pptr_data, 0, data_len); |
| | | memcpy(*pptr_data, ptr_value, data_len); |
| | | |
| | | // Free the doc |
| | | yyjson_doc_free(doc); |
| | | char *ptr_value = yyjson_val_write(val, YYJSON_WRITE_NOFLAG, &data_len); |
| | | printf("data: %s\n", ptr_value); |
| | | printf("len: %lu\n", data_len); |
| | | |
| | | return 0; |
| | | *pptr_data = (char *)malloc(data_len); |
| | | memset(*pptr_data, 0, data_len); |
| | | memcpy(*pptr_data, ptr_value, data_len); |
| | | |
| | | // Free the doc |
| | | yyjson_doc_free(doc); |
| | | |
| | | return 0; |
| | | } |