| | |
| | | return json; |
| | | } |
| | | |
| | | extern "C" int bus_dbapi_get_json_data(const char * json, char ** pptr_data) |
| | | { |
| | | /*{ |
| | | "success": true, |
| | | "msg": "", |
| | | "data": { |
| | | "alarm_ip": "192.168.20.189", |
| | | "alarm_port": 9200, |
| | | } |
| | | }*/ |
| | | int ret = -1; |
| | | size_t data_len = 0; |
| | | size_t success_len = 0; |
| | | size_t total_len = 0; |
| | | const char * ptr_data = NULL; |
| | | const char * ptr_value = NULL; |
| | | const char * success_name = "success"; |
| | | const char * msg_name = "msg"; |
| | | const char * data_quote_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); |
| | | printf("success_len:%lu\n",yyjson_get_len(success)); |
| | | 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)); |
| | | |
| | | total_len = strlen(json); |
| | | ptr_data = strstr(json, data_quote_name); |
| | | ptr_value = strchr(ptr_data, '{'); |
| | | |
| | | //去除最后一个"}"" |
| | | data_len = total_len - (ptr_value - json) - 1; |
| | | 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; |
| | | } |
| | | |
| | | bool bus_dbapi_get(void *handle, const char* topic, google::protobuf::Message& message) { |
| | | const auto topicl = strlen(topic); |
| | | |
| | |
| | | return false; |
| | | } |
| | | |
| | | char* msgdata = repmsg->data + 32; |
| | | msgdata[strlen(msgdata) -1] = '\0'; |
| | | printf("======>> protomsg: %s\n", msgdata); |
| | | |
| | | std::string jsonString = msgdata; |
| | | if (json_to_proto(jsonString, message)) { |
| | | printf("======>> json_to_proto done\n"); |
| | | |
| | | } else { |
| | | printf("======>> json_to_proto fail\n"); |
| | | return false; |
| | | int msglen = strlen(repmsg->data); |
| | | char* msgdata = (char *)malloc(msglen); |
| | | memset(msgdata, 0 , msglen); |
| | | |
| | | if(0 == bus_dbapi_get_json_data((const char *)repmsg->data, &msgdata)) |
| | | { |
| | | printf("======>> protomsg: %s\n", msgdata); |
| | | std::string jsonString = msgdata; |
| | | if (json_to_proto(jsonString, message)) |
| | | { |
| | | printf("======>> json_to_proto done\n"); |
| | | } |
| | | else |
| | | { |
| | | printf("======>> json_to_proto fail\n"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | free(msgdata); |
| | | free_reqmsg(reqmsg); |
| | | |
| | | free(reqData); |
| | | |
| | | return true; |