| | |
| | | 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) { |